如何从具有子元组的元组创建列表?
Posted
技术标签:
【中文标题】如何从具有子元组的元组创建列表?【英文标题】:How to create a list from tuples with sub-tuples? 【发布时间】:2018-01-04 18:46:48 【问题描述】:我有两个列表 a
和 b
。然后我创建所有组合,采用a
的所有两个长度组合加上b
的每个组合:
import itertools as it
a = [1,2,3,4]
b = [5,6]
for i in it.product(it.combinations(a, 2), b):
print (i)
# output:
((1, 2), 5)
((1, 2), 6)
((1, 3), 5)
...
# expected output:
[1, 2, 5]
[1, 2, 6]
[1, 3, 5]
...
如何在循环操作阶段将元组转换为列表?
【问题讨论】:
【参考方案1】:以下推导将起作用:
>>> [[*x, y] for x, y in it.product(it.combinations(a, 2), b)] # Py3
>>> [list(x) + [y] for x, y in it.product(it.combinations(a, 2), b)] # all Py versions
[[1, 2, 5],
[1, 2, 6],
[1, 3, 5],
[1, 3, 6],
[1, 4, 5],
[1, 4, 6],
[2, 3, 5],
[2, 3, 6],
[2, 4, 5],
[2, 4, 6],
[3, 4, 5],
[3, 4, 6]]
【讨论】:
“在循环操作阶段”可能意味着应该保留for循环,但for i
应该替换为for x,y
和print(i)
应该替换为print([*x,y])
.
@Accumulation 可能,但我认为可以从这里拿走。
这是最小的问题,我已经为我的目的转换了我的代码:)【参考方案2】:
简化方法:
a = [1,2,3,4]
b = [5,6]
l = len(a)
print(sorted([a[i], a[i_n], j] for i in range(l) for j in b
for i_n in range(i+1, l) if i < l-1))
输出:
[[1, 2, 5], [1, 2, 6], [1, 3, 5], [1, 3, 6], [1, 4, 5], [1, 4, 6], [2, 3, 5], [2, 3, 6], [2, 4, 5], [2, 4, 6], [3, 4, 5], [3, 4, 6]]
【讨论】:
以上是关于如何从具有子元组的元组创建列表?的主要内容,如果未能解决你的问题,请参考以下文章