用重复元素创建元组

时间:2017-02-17 19:17:27

标签: python tuples

我正在尝试创建以下类型的元组:

('a', 0), ('b', 0), ('a', 1), ('b', 1), ('a', 2), ('b', 2), ('a', 3), ('b', 3)

来自数组:

A = ['a','b']和数字0到3。

什么是好的pythonic表示,因为我在这里结束了一个真正的for循环。

4 个答案:

答案 0 :(得分:6)

使用itertools.product

from itertools import product

tuples = list(product(['a', 'b'], [0, 1, 2, 3]))
print(tuples) # [('a', 0), ('a', 1), ..., ('b', 0), ('b', 1), ...]

如果您按照最初指定的确切顺序需要它们,那么:

tuples = [(let, n) for n, let in product([0, 1, 2, 3], ['a', 'b'])]

如果你的评论是"我在这里结束了真实的for循环"意味着你最终只想迭代这些元素,然后:

for n, let in product([0, 1, 2, 3], ['a', 'b']):
    tup = (let, n) # possibly unnecessary, depending on what you're doing
    ''' your code here '''

答案 1 :(得分:4)

您可以选择itertools.product来获取您正在寻找的笛卡尔积。如果元素顺序不重要,那么我们有

[('a', 0), ('a', 1), ('a', 2), ('a', 3), ('b', 0), ('b', 1), ('b', 2), ('b', 3)]

如果您需要特定订单,

>>> from itertools import product
>>> list(product(A, range(4)))
[('a', 0),
 ('a', 1),
 ('a', 2),
 ('a', 3),
 ('b', 0),
 ('b', 1),
 ('b', 2),
 ('b', 3)]

答案 2 :(得分:2)

src/main/java

<强>输出 L = range(0, 4) K = ['a', 'b'] L3 = [(i, j) for i in K for j in L] print(L3)

如果你想使用列表理解......其他答案也是正确的

答案 3 :(得分:-2)

使用列表理解

>>> [(a,n) for a in list1 for n in range(4)]
[('a', 0), ('a', 1), ('a', 2), ('a', 3), ('b', 0), ('b', 1), ('b', 2), ('b', 3)]

如果订单有问题:

>>> [(a,n) for n in range(4) for a in list1]
[('a', 0), ('b', 0), ('a', 1), ('b', 1), ('a', 2), ('b', 2), ('a', 3), ('b', 3)]