2017-02-17 73 views
2

我想創建以下類型的元組:從陣列創建元組重複元素

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

我在這裏結束了一個真正的循環。

+0

'[(a,n)for n in a for a in A]'其中num是範圍(0,3)。 –

回答

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 n, let in product([0, 1, 2, 3], ['a', 'b']): 
    tup = (let, n) # possibly unnecessary, depending on what you're doing 
    ''' your code here ''' 
2
L = range(0, 4) 
K = ['a', 'b'] 

L3 = [(i, j) for i in K for j in L] 
print(L3) 

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

如果您想使用列表理解......其他的答案是正確的,以及

4

你可以選擇itertools.product讓你要找的笛卡爾乘積對於。如果元素順序是重要的不是,那我們

>>> 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)] 

如果你需要特別順序,

>>> list(tuple(reversed(x)) for x in product(range(4), A)) 
[('a', 0), 
('b', 0), 
('a', 1), 
('b', 1), 
('a', 2), 
('b', 2), 
('a', 3), 
('b', 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)]