Список чередования с фиксированным элементом

Я знаю, что я могу чередовать два списка python с:

[elem for pair in zip(*lists) for elem in pair] 

Теперь мне нужно чередовать список с фиксированным элементом вроде:

 list = [1, 2, 3, 4] # 🐍 python magic 🐍 output = [1, 0, 2, 0, 3, 0, 4] 

7 Solutions collect form web for “Список чередования с фиксированным элементом”

Вы можете попробовать следующую магию itertools:

 >>> from itertools import repeat, chain, izip >>> l = [1, 2, 3, 4] >>> list(chain.from_iterable(izip(l[:-1], repeat(0)))) + l[-1:] [1, 0, 2, 0, 3, 0, 4] 

Одно действительно простое решение:

 [elem for x in list for elem in (x, 0)][:-1] 
 from itertools import izip, repeat start = [1, 2, 3, 4] print [i for j in izip(start, repeat(0)) for i in j][:-1] 

Функция sum Python может использоваться для произвольных типов данных, которые поддерживают добавление, соответствующим образом задавая start параметр. ( см. документы )

 input = [1, 2, 3, 4] fixed = 0 output = sum([[elem, fixed] for elem in input], [])[:-1] # to drop the last `fixed` 

Или если вам не нравится идея использования оператора добавления со списками:

 input = [1, 2, 3, 4] fixed = 0 output = [] for elem in input: output.extend([elem, fixed]) output = output[:-1] 
 >>> lst = [1, 2, 3, 4] >>> newlst = [0]*((len(lst) * 2) - 1) >>> newlst[::2] = lst >>> newlst [1, 0, 2, 0, 3, 0, 4] 

Это может быть не однострочный, но он работает. Кроме того, мои тесты времени, похоже, показывают, что это самое быстрое решение. В форме функции это:

 def interzero(lst): newlst = [0]*((len(lst) * 2) - 1) newlst[::2] = lst return newlst 

Вы можете использовать функцию reduce functools .

 >>> from functools import reduce >>> reduce(lambda x, y: x + [y, 0], [1,2,3,4], [])[:-1] [1, 0, 2, 0, 3, 0, 4] 
 >>> from itertools import chain >>> lst = [1, 2, 3, 4] >>> list(chain(*zip(lst, [0]*(len(lst)-1)))) + [lst[-1]] [1, 0, 2, 0, 3, 0, 4] 
  • Python: как добавить новые элементы в список списка?
  • Поиск значений списка в другом списке с использованием Python
  • Как вставить содержимое одного списка в другой
  • Вычислить разницу между смежными элементами в списке python
  • Найти уникальные пары в списке пар
  • Фильтровать максимум 20 значений из списка целых чисел
  • Список копий не работает?
  • Python - найти те же значения в списке и группе вместе новый список
  •  
    Interesting Posts for Van-Lav

    Интерполяция по регулярной сетке в Python

    Самый быстрый способ обнулить низкие значения в массиве?

    Как скомпилировать несколько множественных регулярных выражений за один раз? Это более эффективно? – python

    python, как узнать, включена ли гиперпоточность

    Поиск минимального расстояния от помех для набора строк в python

    Python Metaclass: Понимание 'with_metaclass ()'

    исключение python <type 'exceptions.ImportError'> Нет модуля с именем gdb:

    Спектроскопические данные по спектру данных панд в 3D с разной длиной массива

    Ошибка при попытке добавить цветную панель

    Как изменить размер шрифта оси в графике matplotlib при рендеринге с использованием Latex?

    формат вывода python для json

    Использовать механизм шаблонов Jinja2 во внешнем файле javascript.

    Как вернуть уникальные слова из текстового файла с помощью Python

    Массивы NumPy с SQLite

    читать несколько файлов с использованием многопроцессорности

    Python - лучший язык программирования в мире.