Как бы вы сделали строку, разделенную запятыми, из списка строк?
Автор вопроса: mweerdenОтветов: 12
Каким будет ваш предпочтительный способ объединения строк из последовательности, чтобы между каждыми двумя последовательными парами добавлялась запятая. То есть, как сопоставить, например, ['a', 'b', 'c'] с 'a,b,c'? (Варианты ['s'] и [] должны быть сопоставлены с 's' и '' соответственно.)
Обычно я использую что-то вроде ''.join(map(lambda x: x+',',l))[:-1], но тоже чувствую себя несколько неудовлетворенным.
Отвечает ли это на ваш вопрос? Как объединить элементы в списке в один строка? Georgy 09.12.2020
ПРИМЕЧАНИЕ. Пробел после запятой является намеренным.
Ответ 5 · рейтинг 13 · Aaron Maenpaa
@ Питер Хоффманн
Использование выражений генератора дает также преимущество создания итератора, но экономит импорт itertools. Кроме того, понимание списков обычно предпочтительнее отображать, поэтому я бы ожидал, что выражения генератора предпочтительнее imap.
>>> l = [1, "foo", 4 ,"bar"]
>>> ",".join(str(bit) for bit in l)
'1,foo,4,bar'
Ответ 6 · рейтинг 13 · Douglas Leeder
Разве вы просто не хотите:
",".join(l)
Очевидно, что становится сложнее, если вам нужно заключить в кавычки / экранировать запятые и т. Д. В значениях. В этом случае я бы посоветовал взглянуть на модуль csv в стандартной библиотеке:
>>> my_list = ['A', '', '', 'D', 'E',]
>>> ",".join([str(i) for i in my_list if i])
'A,D,E'
my_list может содержать переменные любого типа. Это позволит избежать результата 'A,,,D,E'.
Ответ 8 · рейтинг 5 · Peter Hoffmann
@ jmanning2k с использованием понимания списка имеет обратную сторону создания нового временного списка. Лучшим решением было бы использовать itertools.imap, который возвращает итератор
from itertools import imap
l = [1, "foo", 4 ,"bar"]
",".join(imap(str, l))
Ответ 9 · рейтинг 3 · Community
Вот пример со списком
>>> myList = [['Apple'],['Orange']]
>>> myList = ','.join(map(str, [i[0] for i in myList]))
>>> print "Output:", myList
Output: Apple,Orange
Более точным:-
>>> myList = [['Apple'],['Orange']]
>>> myList = ','.join(map(str, [type(i) == list and i[0] for i in myList]))
>>> print "Output:", myList
Output: Apple,Orange
wordList = ['USD', 'EUR', 'JPY', 'NZD', 'CHF', 'CAD']
stringText = ''
for word in wordList:
stringText += word + ','
stringText = stringText[:-2] # get rid of last comma
print(stringText)
Ответ 11 · рейтинг 1 · Ron Kalian
Я бы сказал, что библиотека csv - единственный разумный вариант здесь, поскольку она была создана для работы со всеми вариантами использования csv, такими как запятые в строке и т. Д.
Чтобы вывести список l в файл .csv:
import csv
with open('some.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(l) # this will output l as a single row.
Также можно использовать writer.writerows(iterable) для вывода нескольких строк в CSV.
Этот пример совместим с Python 3, поскольку в другом ответе здесь используется StringIO, который является Python 2.
Ответ 12 · David Singer
Если я чего-то не упускаю, ','.join(foo) должен делать то, о чем вы просите.
является более безопасным и довольно Pythonic, хотя результирующую строку будет сложно проанализировать, если элементы могут содержать запятые - в этот момент вам понадобится полная мощность модуля csv, как указывает Дуглас в своем ответе.)