如何将子列表中的数据解压缩成一个列表?

2024-04-26 10:50:42 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑以下代码:

string = "ABCD"
variations = [list(itertools.combinations(string,x)) for x in range(1,5)]
variations

它产生以下输出:

[[('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')]]

但我想要的结果是:

[('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')]

换句话说,我想将子列表中的所有数据解压到一个列表中(以尽可能短的方式)

我试过用星号:

string = "ABCD" 
variations = [*list(itertools.combinations(string,x)) for x in range(1,5)]

但它会引发以下错误:

SyntaxError: iterable unpacking cannot be used in comprehension

我该怎么办?(再说一遍,我想保持简洁)


Tags: 数据代码in列表forstring方式range
3条回答

只需将另一个for添加到您的列表理解中,该理解在combinations上循环:

variations = [y for x in range(1, 5) for y in itertools.combinations(string, x)]
print(variations)

输出:

[('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')]

可以在列表中执行嵌套迭代。像这样:

[y for x in range(1,5) for y in itertools.combinations(string, x)]

variations = [e for x in range(1,5) for e in (itertools.combinations(string,x)) ]

相关问题 更多 >