könnten Sie zip()
, dies zu tun:
def zip_lists(l1, l2):
if len(l1) == len(l2):
return [x + y for x, y in zip(l1, l2)]
s, b = min(l1, l2), max(l1, l2)
rest = len(s)
return [x + y for x, y in zip(s, b)] + b[rest:]
Above Logik:
- Wenn beide Listen die gleiche Länge haben,
zip()
sie nur normal.
- Andernfalls finden Sie die kleinste Liste
s
, und die größte Liste b
.
- Berechnen Sie die Länge von
s
, die rest
ist.
- Dann
zip()
aus beiden Listen, und fügen Sie die Trailing-Elemente, rest
aus der größeren Liste b
.
Das Verhalten von zip_lists()
ist unten dargestellt:
>>> print(zip_lists([1,2,3,4,5], [10,20,30,40,50,60,70]))
[11, 22, 33, 44, 55, 60, 70]
>>> print(zip_lists([1,2,3,4,5], [10,20,30,40,50]))
[11, 22, 33, 44, 55]
Da diese Frage markiert 'Python 2.7' Sie die Antwort aktualisieren sollte' izip_longest' statt 'zip_longest' –
@GarbageCollector Guter Punkt zu verwenden, . Verpasst das. – Psidom