【问题标题】: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]
  ...

如何在循环操作阶段将元组转换为列表?

【问题讨论】:

标签: python python-3.x list tuples itertools


【解决方案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]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 2013-09-10
    相关资源
    最近更新 更多