2015-02-08 41 views
1

我有以下代碼:郵編全部都在兩個列表

a = [1, 2, 3, 4, 5] 
b = ['test1', 'test2', 'test3', 'test4', 'test5'] 
c = zip(a, b) 
print c 

這讓我的輸出:

[(1, 'test1'), (2, 'test2'), (3, 'test3'), (4, 'test4'), (5, 'test5')] 

我真正想要的,雖然看起來是這樣的:

[(1, 'test1'), (1, 'test2'), (1, 'test3'), (1, 'test4'), (1, 'test5') 
(2, 'test1'), (2, 'test2'), (2, 'test3'), (2, 'test4'), (2, 'test5') 
(3, 'test1'), (3, 'test2'), (3, 'test3'), (3, 'test4'), (3, 'test5') 
(4, 'test1'), (4, 'test2'), (4, 'test3'), (4, 'test4'), (4, 'test5') 
(5, 'test1'), (5, 'test2'), (5, 'test3'), (5, 'test4'), (5, 'test5')] 

任何人都可以告訴我如何修改上面的代碼來獲得我想要的輸出嗎?

感謝

回答

5

你想要什麼Cartesian Product

import itertools 
for i in itertools.product([1, 2, 3, 4, 5],['test1', 'test2', 'test3', 'test4', 'test5']): 
    print i 
+0

一個笛卡爾合併是我該怎麼做在SQL中使用它,但我不確定如何在Python中執行它。謝謝。 – gdogg371 2015-02-08 14:04:33

1

列表理解在這裏工作:

>>> a = [1, 2, 3, 4, 5] 
>>> b = ['test1', 'test2', 'test3', 'test4', 'test5'] 
>>> [ (x,y) for x in a for y in b ] 
[(1, 'test1'), (1, 'test2'), (1, 'test3'), (1, 'test4'), (1, 'test5'), (2, 'test1'), (2, 'test2'), (2, 'test3'), (2, 'test4'), (2, 'test5'), (3, 'test1'), (3, 'test2'), (3, 'test3'), (3, 'test4'), (3, 'test5'), (4, 'test1'), (4, 'test2'), (4, 'test3'), (4, 'test4'), (4, 'test5'), (5, 'test1'), (5, 'test2'), (5, 'test3'), (5, 'test4'), (5, 'test5')] 
4

您可以使用for循環,

c = [] 
for i in a: 
    for s in b: 
     c.append((i, s)) 

或等效的列表解析,

c = [(i,s) for i in a for s in b] 

或不斷有用itertools.product

import itertools 

c = list(itertools.product(a, b))