У меня есть такой вклад:
['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
Я хочу объединить элементы между ними, ''
чтобы иметь такой вывод:
['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']
Я попытался использовать join
и список нарезки следующим образом:
a=['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
a[2:5] = [''.join(a[ 2: 5])]
a=['assembly', '', 'python', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
Это работает в некоторой степени, но я не знаю, как повторить эту инструкцию для всего списка.
Это ужасно и смешно, но
может взять любую строку, которую вы можете гарантировать, не содержится в конкатенации списка, и вернуть функцию, выполняющую то, что вы хотите. Конечно, вы, вероятно, захотите использовать это только один или два раза для вашей конкретной ситуации, поэтому, если вы можете гарантировать, что ни один элемент списка не содержит пробела, он может выглядеть примерно так:
источник
Если вы не можете или не хотите использовать itertools:
источник
Ты можешь сделать это:
Вывод:
Редактировать после комментариев:
Вывод:
источник
# get the indices.
не очень полезный комментарий. Я бы посоветовал вам либо сделать это полезным (напримерfilter the indices to keep only those that correspond to whitespace
), либо полностью удалить его.indices = [i for s in a if s == '']
?indx = [i for i, x in enumerate(a) if x == '']
a = ['asse','mbly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c+', '+']
но похоже, что вы могли бы улучшить свою строку 3, добавив список с нулевой строкой на концах a,enumerate([''] + a + [''])
затем удалив строкуa[0:indx[0]]
иa[indx[-1]+1:]
в своей строке 4. Это по-прежнему не учитывает наличие двух нулевых строк рядом с eachother хотяЕсли входные разделители на самом деле являются пустыми строками, то вы можете сделать
источник
Довольно старый, но все же полезный:
Это дает
источник
выполните цикл над списком
внутри цикла, добавьте элемент во временную пустую строку и проверьте условие, является ли элемент пустой строкой или последним элементом списка, если значение true, то добавьте временную переменную в выходной список и измените значение этой переменной в пустую строку
Code:
Вывод:
['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']
источник
Я согласен с тем, что в ответе Cris используется большинство подходов Python , но было бы хорошо немного адаптировать ответ Cris . Вместо того,
groupby(l,key = bool)
чтобы использовать, чтобы использоватьgroupby(l, key = lambda x: x !='')
и избавиться от ненужной двусмысленностиPS Я пишу только новый ответ, потому что у меня недостаточно репутации, чтобы написать комментарий к ответу Криса .
источник
Еще одна рабочая версия, только с базовыми циклами / тестами:
источник