Frage Schleife über 2 Listen, Wiederholung der kürzesten bis Ende der längsten


Ich bin sicher, dass es einen einfachen und offensichtlichen Weg gibt, dies zu tun, aber ich habe gegoogelt und die Dokumente gelesen und ich kann einfach nichts finden.

Das möchte ich erreichen:

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

Ich habe eine Liste von Daten und einige von ihnen haben etwas markiert auf ihnen. Ich habe dann eine viel größere Liste von Daten und ich möchte die kleinste Liste so oft wie möglich in die größere Liste aufnehmen. Es wird wahrscheinlich eine Art Schleife benötigen, da ich Zugriff auf die Daten in der größeren Liste für das Endergebnis benötige.

Aus irgendeinem Grund kann ich einfach keinen guten Weg sehen, dies zu tun.


19
2018-01-27 11:34


Ursprung


Antworten:


Versuchen

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

10
2018-01-27 11:36



Angenommen la ist länger als 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) gibt einen zyklischen Iterator für die Elemente in zurück lb.

  • zip(...) Gibt eine Liste von Tupeln zurück, in denen jedes Element einem Element in entspricht la gekoppelt mit dem übereinstimmenden Element im Iterator.


21
2018-01-27 12:00