Какой будет предпочтительный способ объединения строк из последовательности, такой, что между каждыми двумя последовательными парами добавляется запятая. То есть, как вы на карте, например, ['a', 'b', 'c']
к 'a,b,c'
? (Случаи ['s']
и []
должны быть сопоставлены 's'
и ''
соответственно.)
Я обычно заканчиваю тем, что использую что-то подобное ''.join(map(lambda x: x+',',l))[:-1]
, но также чувствую себя несколько неудовлетворенным.
Почему
map
/lambda
магия? Разве это не работает?В случае, если в списке есть числа, вы можете использовать понимание списка:
или выражение генератора:
источник
",".join(l)
не будет работать для всех случаев. Я бы предложил использовать модуль CSV с StringIOисточник
StringIO
в Python 3from io import StringIO
в Python 3Вот альтернативное решение в Python 3.0, которое допускает элементы нестрокового списка:
стандартный способ
альтернативное решение
ПРИМЕЧАНИЕ. Пробел после запятой является преднамеренным.
источник
Разве вы просто не хотите:
Очевидно, что это становится более сложным, если вам нужно заключить в кавычки / экранировать запятые и т. Д. В значениях. В этом случае я бы предложил посмотреть модуль csv в стандартной библиотеке:
https://docs.python.org/library/csv.html
источник
@ Питер Хоффманн
Преимущество использования выражений генератора также заключается в создании итератора, но экономит импорт itertools. Кроме того, списочные представления обычно предпочтительнее отображения, поэтому я ожидал бы, что генераторные выражения предпочтительнее imap.
источник
my_list
может содержать переменные любого типа. Это позволит избежать результата'A,,,D,E'
.источник
источник
@ jmanning2k, использующий понимание списка, имеет обратную сторону создания нового временного списка. Лучшим решением было бы использовать itertools.imap, который возвращает итератор
источник
str.join
работу быстрее сlist
по сравнению с генераторомВот пример со списком
Более точным:-
Пример 2:
источник
Я бы сказал, что
csv
библиотека - единственная разумная опция, так как она была построена так, чтобы справляться со всеми вариантами использования csv, такими как запятые в строке и т. Д.Чтобы вывести список
l
в файл .csv:Также возможно использовать
writer.writerows(iterable)
для вывода нескольких строк в CSV.Этот пример совместим с Python 3, так как здесь используется другой ответ
StringIO
- Python 2.источник
Если я что-то упустил,
','.join(foo)
должен делать то, что вы просите.(редактировать: и, как указывает jmanning2k,
является более безопасным и довольно Pythonic, хотя результирующая строка будет трудно разобрать, если элементы могут содержать запятые - в этот момент вам понадобится полная мощность
csv
модуля, как указывает Дуглас в своем ответе.)источник
Мои два цента. Мне нравится более простой однострочный код в Python:
Это pythonic, работает для строк, чисел, None и пустой строки. Это коротко и удовлетворяет требованиям. Если список не будет содержать чисел, мы можем использовать этот более простой вариант:
Также это решение не создает новый список, но использует итератор, как указал @Peter Hoffmann (спасибо).
источник