【问题标题】:Creating lists where each element is of length i创建每个元素长度为 i 的列表
【发布时间】:2020-08-03 05:40:25
【问题描述】:

我正在尝试创建每个元素都属于列表 i 的列表,但是使用下面的当前代码,我得到了一个不好的结果。

from itertools import combinations
x = 'ABCDABC'
y = [''.join(l) for i in range(len(x)) for l in combinations(x, i+1)]
z = []
for i in y:
    if i in x:
        z.append(i)

w = sorted(list(set(z)))

def Sorting(lst):
    lst.sort(key=len)
    return lst

final = 0

for i in range(len(z)):
    c = []
    for j in z:
        if len(j) == i:
            c.append(j)
    print(c)

结果:

[]
['A', 'B', 'C', 'D', 'A', 'B', 'C']
['AB', 'AB', 'BC', 'BC', 'CD', 'DA', 'AB', 'BC']
['ABC', 'ABC', 'ABC', 'BCD', 'CDA', 'DAB', 'ABC']
['ABCD', 'BCDA', 'CDAB', 'DABC']
['ABCDA', 'BCDAB', 'CDABC']
['ABCDAB', 'BCDABC']
['ABCDABC']
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]

它应该在哪里:

['A', 'B', 'C', 'D', 'A', 'B', 'C']
['AB', 'AB', 'BC', 'BC', 'CD', 'DA', 'AB', 'BC']
['ABC', 'ABC', 'ABC', 'BCD', 'CDA', 'DAB', 'ABC']
['ABCD', 'BCDA', 'CDAB', 'DABC']
['ABCDA', 'BCDAB', 'CDABC']
['ABCDAB', 'BCDABC']
['ABCDABC']

这样我可以进一步操作

【问题讨论】:

    标签: python-3.x list loops unique list-comprehension


    【解决方案1】:

    仅使用您的代码:

    max_len = max(map(len, z))
    for i in range(1, max_len + 1):
        c = []
        for j in z:
            if len(j) == i:
                c.append(j)
        print(c)
    

    输出:

    ['A', 'B', 'C', 'D', 'A', 'B', 'C']
    ['AB', 'AB', 'BC', 'BC', 'CD', 'DA', 'AB', 'BC']
    ['ABC', 'ABC', 'ABC', 'BCD', 'CDA', 'DAB', 'ABC']
    ['ABCD', 'BCDA', 'CDAB', 'DABC']
    ['ABCDA', 'BCDAB', 'CDABC']
    ['ABCDAB', 'BCDABC']
    ['ABCDABC']
    

    要获得预期的输出,您可以使用 collections.defaultdict:

    from collections import defaultdict
    
    d = defaultdict(list)
    for s in z:
        d[len(s)].append(s)
    c = list(d.values())
    c
    

    输出:

    [['A', 'B', 'C', 'D', 'A', 'B', 'C'],
     ['AB', 'AB', 'BC', 'BC', 'CD', 'DA', 'AB', 'BC'],
     ['ABC', 'ABC', 'ABC', 'BCD', 'CDA', 'DAB', 'ABC'],
     ['ABCD', 'BCDA', 'CDAB', 'DABC'],
     ['ABCDA', 'BCDAB', 'CDABC'],
     ['ABCDAB', 'BCDABC'],
     ['ABCDABC']]
    

    您正在创建一个字典,其中键是当前字符串的长度,每个值是一个包含所有相同长度的字符串的列表,为了获得预期的输出,您只得到 dict 值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-05
      • 2015-01-31
      • 2019-11-30
      • 1970-01-01
      • 2023-02-05
      • 2022-01-26
      • 1970-01-01
      相关资源
      最近更新 更多