为了账号安全,请及时绑定邮箱和手机立即绑定

如何将列表中的每个项目附加到 Python 列表中的列表?

如何将列表中的每个项目附加到 Python 列表中的列表?

慕无忌1623718 2021-09-02 20:03:27
对不起,标题令人费解。例如,我有一个列表:[a, b, c, d]我想以这种格式生成具有不同组合的排名列表:[a][b][c][d][a, b][a, c][a, d][a, b, c][a, b, d][a, b, c, d]我在生成此列表时遇到问题。到目前为止,我首先做的是通过在每次迭代中添加一个元素来生成每个列表:[][a][a, b][a, b, c]然后我生成了排名列表的长度:[][][][][a][a][a][a, b][a, b][a, b, c]现在我被困在这里。Python 中是否有允许我执行此操作的库,或者您只能在代码中手动执行此操作?我要做的最后一件事是从我在顶部生成的原始列表中附加一个一对一的列表。这是我尝试过的代码,假设original_list是我在顶部制作的原始列表,并且new_list是我在此文本上方生成的列表:for x in range(0, len(original_list)):    new_list[x].append(original_list[x])这显然不起作用,因为它将每个项目附加original_list到new_list.编辑:元素应该按字母顺序排列,只有最后一个元素具有不同的组合,没有重复元素,因为我在一个包含 21 个项目的列表上尝试这个。
查看完整描述

3 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

通过将所需的列表追加到新列表中使用简单迭代:


lst = ['a', 'b', 'c', 'd', 'e']


nlst = []

for i in range(len(lst)):

    for y in lst[i:]:

        nlst.append(lst[:i] + list(y))


for x in nlst:

    print(x)


# ['a']

# ['b']

# ['c']

# ['d']

# ['e']

# ['a', 'b']

# ['a', 'c']

# ['a', 'd']

# ['a', 'e']

# ['a', 'b', 'c']

# ['a', 'b', 'd']

# ['a', 'b', 'e']

# ['a', 'b', 'c', 'd']

# ['a', 'b', 'c', 'e']

# ['a', 'b', 'c', 'd', 'e']


查看完整回答
反对 回复 2021-09-02
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

使用itertools recipes 中的 powerset recipe ,您可以执行以下操作:


from itertools import chain, combinations



def powerset(iterable):

    s = list(iterable)

    it = chain.from_iterable(combinations(s, r) for r in range(len(s) + 1))

    return map(list, (e for e in it if e))



result = sorted(powerset(['a', 'b', 'c', 'd']), key=lambda x: (len(x), ''.join(x)))

for s in result:

    print(s)

输出


['a']

['b']

['c']

['d']

['a', 'b']

['a', 'c']

['a', 'd']

['b', 'c']

['b', 'd']

['c', 'd']

['a', 'b', 'c']

['a', 'b', 'd']

['a', 'c', 'd']

['b', 'c', 'd']

['a', 'b', 'c', 'd']

更新


鉴于更新的要求,您可以执行以下操作:


lst = ['a', 'b', 'c', 'd']

length = len(lst)



def patterns(l):

    for i in range(length):

        for c in l[i:]:

            yield l[:i] + [c]



for pattern in sorted(patterns(lst), key=lambda x: (len(x), ''.join(x))):

    print(pattern)

输出


['a']

['b']

['c']

['d']

['a', 'b']

['a', 'c']

['a', 'd']

['a', 'b', 'c']

['a', 'b', 'd']

['a', 'b', 'c', 'd']


查看完整回答
反对 回复 2021-09-02
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

尝试这个:


from itertools import combinations


a = ['a', 'b', 'c', 'd']

result = [list(combinations(a,i))for i in range(1,len(a)+1)]

并像这样打印:


for i in result:

    print(*list(i), sep='\n')


查看完整回答
反对 回复 2021-09-02
  • 3 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信