2011-01-27 10 views
17

Jestem pewien, że jest łatwy i oczywisty sposób, aby to zrobić, ale ja googlowałem i czytałem dokumenty i po prostu nie mogę znaleźć niczego.pętla nad 2 listami, powtarzając najkrótszy do końca najdłuższy

To jest to, co chcę osiągnąć:

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

Mam wykaz dat i niektóre z nich coś zaznaczone na nich. Mam wtedy znacznie większą listę dat i chcę umieścić najmniejszą listę na większej liście tak wiele razy, jak to tylko możliwe. Prawdopodobnie będzie wymagać pewnego rodzaju pętli, ponieważ potrzebuję dostępu do dat na większej liście dla wyniku końcowego.

Z jakiegoś powodu po prostu nie widzę dobrego sposobu, aby to zrobić.

Odpowiedz

9

Spróbuj

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

Czy to uruchomiłeś? Nie tego, o co w ogóle prosił OP. –

+1

@Daniel: Przepraszamy za opublikowanie nietestowanego kodu. Poprawione teraz. –

18

Zakładając la przekracza 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) wraca do iteracyjnej cyklicznego dla elementów lb.

  • zip(...) zwraca listę krotek, w których każdy element odpowiada elementowi w la w połączeniu z odpowiednim elementem w iteratorze.

Powiązane problemy