2011-01-27 54 views
17

我確信有一個簡單而明顯的方法來做到這一點,但我一直在使用Google和閱讀文檔,我什麼都找不到。循環2個列表,重複最短直到最長結束

這就是我想要達到的目標:

la = ['a1','a2','a3','a4'] 
lb = ['b1','b2'] 
result = ['a1_b1','a2_b2','a3_b1','a4_b2'] 

我有日期的列表,其中一些已經標註在他們的東西。然後我有一個更大的日期列表,我想盡可能多地把最小的列表放在更大的列表中。它可能需要某種循環,因爲我需要訪問最終結果的較大列表中的日期。

由於某種原因,我只是看不到一個很好的方法來做到這一點。

回答

9

嘗試

result = ["_".join((i, j)) for i, j in itertools.izip(la, itertools.cycle(lb))] 
+1

你跑這個了嗎?不是OP要求的。 – 2011-01-27 11:38:09

18

假設la長於lb

>>> import itertools 
>>> [x+'_'+y for x,y in zip(la, itertools.cycle(lb))] 
['a1_b1', 'a2_b2', 'a3_b1', 'a4_b2'] 
  • itertools.cycle(lb)返回在lb元素的環狀迭代器。

  • ​​返回元組列表,其中每個元素對應於la中的元素,並與迭代器中的匹配元素結合使用。