如何从具有子元组的元组创建列表?

Posted

技术标签:

【中文标题】如何从具有子元组的元组创建列表?【英文标题】:How to create a list from tuples with sub-tuples? 【发布时间】:2018-01-04 18:46:48 【问题描述】:

我有两个列表 ab。然后我创建所有组合,采用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,yprint(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]]

【讨论】:

以上是关于如何从具有子元组的元组创建列表?的主要内容,如果未能解决你的问题,请参考以下文章

Python中的元组(Tuple)

从元组的元组中创建一个列表

如何使用子元组从元组创建列表?

Python的元组列表截取

Python - 验证列表中的元组具有相同的长度

如何将 Pig 元组拆分为子元组?