如何将子列表中的数据解包到一个列表中? [复制]

Posted

技术标签:

【中文标题】如何将子列表中的数据解包到一个列表中? [复制]【英文标题】:How to unpack the data in the sublists into one list? [duplicate] 【发布时间】:2020-01-13 05:12:16 【问题描述】:

考虑以下代码:

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

我该怎么办? (再次,我想保持简洁)

【问题讨论】:

你知道这个操作通常被称为“扁平化”吗? (平面图,连接,...) 【参考方案1】:

只需将另一个 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')]

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于如何将子列表中的数据解包到一个列表中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 行解包到 pandas 数据框

python:将字符串解包到列表中

熊猫数据框python中的解包列表[重复]

如何将子列表视图项目包含每个项目的数据

如何将一个数组的值解包到另一个数组的特定索引中?

Python:如何将剩余的列表元素添加到列表中,类似于解包?