请考虑以下代码:
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)]
但它抛出以下错误:
语法错误:可迭代解包不能用于理解
我该怎么办?(再次,我想保持简洁(
只需在列表理解中添加另一个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)) ]