猿问

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

对不起,标题令人费解。例如,我有一个列表:[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 个项目的列表上尝试这个。


慕无忌1623718
浏览 166回答 3
3回答

哈士奇WWW

通过将所需的列表追加到新列表中使用简单迭代: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']

呼啦一阵风

使用itertools recipes 中的 powerset recipe ,您可以执行以下操作:from itertools import chain, combinationsdef 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']

繁星点点滴滴

尝试这个:from itertools import combinationsa = ['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')
随时随地看视频慕课网APP

相关分类

Python
我要回答