Как бы вы сделали разделенную запятыми строку из списка строк? - PullRequest
416 голосов
/ 05 сентября 2008

Какой ваш способ предпочтительнее объединить строки из последовательности, так что между каждыми двумя последовательными парами добавляется запятая. То есть, как вы сопоставляете, например, [ 'a', 'b', 'c' ] с 'a,b,c'? (Случаи [ s ] и [] должны быть сопоставлены с s и '' соответственно.)

Я обычно заканчиваю тем, что использую что-то вроде ''.join(map(lambda x: x+',',l))[:-1], но чувствую себя несколько неудовлетворенным.

Редактировать: мне стыдно и приятно, что решение такое простое. Очевидно, я понятия не имею, что я делаю. (Возможно, в прошлом я нуждался в «простой» конкатенации и как-то запомнил s.join([e1,e2,...]) как сокращение для s+e1+e2+....)

Ответы [ 15 ]

1 голос
/ 18 июня 2018

Я бы сказал, что библиотека 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.

1 голос
/ 15 мая 2017

Вот пример со списком

>>> 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

Пример 2: -

myList = ['Apple','Orange']
myList = ','.join(map(str, myList)) 
print "Output:", myList
Output: Apple,Orange
1 голос
/ 05 сентября 2008

Если я что-то упустил, ','.join(foo) должен делать то, что вы просите.

>>> ','.join([''])
''
>>> ','.join(['s'])
's'
>>> ','.join(['a','b','c'])
'a,b,c'

(редактировать: и, как указывает jmanning2k,

','.join([str(x) for x in foo])

более безопасный и довольно Pythonic, хотя результирующая строка будет трудна для анализа, если элементы могут содержать запятые - в этот момент вам потребуется полная мощность модуля csv, как указывает Дуглас в своем ответе. )

0 голосов
/ 24 апреля 2018

чуть-чуть как то так:)

String = "Once:Upon:a:Time:A:Long:Time:Ago"
ding = String.split(':')

ring = (" , ").join(ding)

print(ring)

Вывод: Однажды, После, Время, А, Длинное, Время, Назад

0 голосов
/ 07 января 2018

Мои два цента. Мне нравится более простой однострочный код в Python:

>>> from itertools import imap, ifilter
>>> l = ['a', '', 'b', 1, None]
>>> ','.join(imap(str, ifilter(lambda x: x, l)))
a,b,1
>>> m = ['a', '', None]
>>> ','.join(imap(str, ifilter(lambda x: x, m)))
'a'

Это pythonic, работает для строк, чисел, None и пустой строки. Он короткий и удовлетворяет требованиям. Если список не будет содержать чисел, мы можем использовать этот более простой вариант:

>>> ','.join(ifilter(lambda x: x, l))

Также это решение не создает новый список, но использует итератор, как указал @Peter Hoffmann (спасибо).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...