2011-01-27 3 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

Вы запустили это? Не то, о чем попросил ОП. –

+1

@ Даниэль: Извините за отправку непроверенного кода. Исправлено сейчас. –

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.

  • zip(...) возвращает список кортежей, в которых каждый элемент соответствует элементу в la в сочетании с соответствующим элементом в итераторе.

Смежные вопросы