2014-01-10 123 views
2

是否有可能用最小的一個「relooping」與另一個大小的循環2列表?Python雙循環

例如:

list = [1,2,3,4,5,6,7,8,10] 
list2 = [a,b] 

newlist = [] 
for number, letter in zip(list, list2): 
    newlist.append(item) 
    newlist.append(item2) 

環路在[1A,2B]停止導致有在list2中沒有更多的項目,是否有可能爲list2中重新開始,直到list1的爲空?即: newlist = [1a,2b,3a,4b,5a,6b]等?

thkx!

+1

第二個列表的長度是否是第一個的因子?也就是說,它會重複多次? – aganders3

+0

@AshwiniChaudhary:不是那麼重要,因爲那個人沒有* itertools就特意要求一種方式。我相信這是其他事情的重複,不過,我想我自己已經回答了這個問題。 – DSM

+0

@DSM這一個:[交錯2列表的不等長度](http://stackoverflow.com/questions/19883826/interleaving-2-lists-of-unequallengths) –

回答

6
>>> l1 = [1,2,3,4,5,6,7,8,10] 
>>> l2 = ['a','b'] 
>>> 
>>> from itertools import cycle 
>>> 
>>> for number, letter in zip(l1, cycle(l2)): 
...  print number, letter 
... 
1 a 
2 b 
3 a 
4 b 
5 a 
6 b 
7 a 
8 b 
10 a 

itertools.cycle

另外,不應該使用list作爲變量名稱,因爲該名稱已由內置函數list()採用。

4

使用itertools.cycle

>>> from itertools import cycle 
>>> l1 = [1,2,3,4,5,6,7,8,10] 
>>> l2 = ['a','b'] 
>>> map(''.join, zip(map(str, l1), cycle(l2))) 
['1a', '2b', '3a', '4b', '5a', '6b', '7a', '8b', '10a']