Python: кратчайший способ чередования элементов из двух списков


9

Я пытаюсь получить кратчайший путь (возможный символ) для получения списка 3.

Список 1 и Список 2 уже приведены мне в качестве аргументов и имеют одинаковую длину.

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

И Список 3 должен выглядеть так (да, это должен быть список):

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

2
Ваша цель состоит в том, чтобы буквально вывести конкретный список, l3 = ['a', 1, 'b', 2, 'c', 3, 'd', 4, 'e', 5]данный l1 = [1, 2, 3, 4, 5]и l2 = ['a', 'b', 'c', 'd', 'e']уже назначенный, или идея состоит в том, что l1и l2могут быть любые два списка одинаковой длины?
xnor

Ответы:


13

Почтовый индекс и сумма

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

Попробуйте онлайн!

Объединяет два списка в один, а затем добавляет все кортежи в один объединенный список. Почтовый индекс работает только в том случае, если списки гарантированно имеют одинаковый размер, в противном случае он усекает более длинный список.

Добавлено окружение, [* ]чтобы преобразовать его в список, как предлагает FryAmTheEggman.


2
Если вы используете Python 2, вы можете просто использовать listвместо [* (...) ]+3 байт.
Эрик Outgolfer

6

Назначение среза

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

Это на три байта больше, чем при использовании решения Джо Кинга c=[*sum(zip(b,a),())], но это изящно. Это может быть короче ситуативно (хотя я не могу думать о том, где).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.