我正在尝试创建以下类型的元组:
('a', 0), ('b', 0), ('a', 1), ('b', 1), ('a', 2), ('b', 2), ('a', 3), ('b', 3)
来自数组:
A = ['a','b']
和数字0到3。
什么是好的pythonic表示,因为我在这里结束了一个真正的for循环。
答案 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)]