Python: najkrótszy sposób na przeplatanie elementów z dwóch list


9

Próbuję uzyskać najkrótszą drogę (możliwa postać) do uzyskania listy 3.

Lista 1 i Lista 2 są już podane jako argumenty i mają tę samą długość.

l1 = [1, 2, 3, 4, 5]
l2 = ['a', 'b', 'c', 'd', 'e']

Lista 3 powinna wyglądać (tak, musi to być lista):

l3 = ['a', 1, 'b', 2, 'c', 3, 'd', 4, 'e', 5]

2
Czy Twoim celem jest dosłownie wyprowadzenie l3 = ['a', 1, 'b', 2, 'c', 3, 'd', 4, 'e', 5]podanej l1 = [1, 2, 3, 4, 5]i l2 = ['a', 'b', 'c', 'd', 'e']już przypisanej konkretnej listy , czy też jest to pomysł l1i l2mogą to być dowolne dwie listy o tej samej długości?
xnor

Odpowiedzi:


13

Zip and Sum

[*sum(zip(l2,l1),())]

Wypróbuj online!

Zasuwa dwie listy razem, a następnie dodaje wszystkie krotki, aby utworzyć jedną połączoną listę. Zip działa tylko wtedy, gdy listy mają taki sam rozmiar, w przeciwnym razie przycina dłuższą listę.

Dodano otoczenie, [* ]aby przekształcić je w listę, jak sugeruje FryAmTheEggman.


2
Jeśli używasz Python 2, możesz po prostu użyć listzamiast [* (...) ]+3 bajtów.
Erik the Outgolfer

7

Przydział plasterków

c=a*2
c[1::2]=a
c[::2]=b

To trzy bajty dłużej niż przy użyciu rozwiązania Jo Kinga c=[*sum(zip(b,a),())], ale jest fajne. Sytuacja może być krótsza (choć nie wiem, gdzie).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.