Как бы вы сделали строку через запятую из списка строк?

Boost tuple был бы моим предпочтительным выбором для обобщенной системы возврата более одного значения из функции.

Возможный пример:

include "boost/tuple/tuple.hpp"

tuple <int,int> divide( int dividend,int divisor ) 

{
  return make_tuple(dividend / divisor,dividend % divisor )
}
434
задан David Moles 18 April 2018 в 17:54
поделиться

8 ответов

myList = ['a','b','c','d']
myString = ",".join(myList )

Это не будет работать, если список будет содержать числа.

<час>

Как Ricardo Reyes предложенный, если это содержит нестроковые типы (такие как целые числа, плавания, bools, Ни один) тогда, делает:

myString = ','.join(map(str, myList)) 
809
ответ дан David Anderton 18 April 2018 в 17:54
поделиться

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

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

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

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

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

1
ответ дан David Singer 18 April 2018 в 17:54
поделиться

Не делайте Вас, просто хотите:

",".join(l)

, Очевидно, это становится более сложным, если необходимо заключить запятые в кавычки/выйти и т.д. в значениях. В этом случае я предложил бы смотреть на csv модуль в стандартной библиотеке:

https://docs.python.org/library/csv.html

11
ответ дан twasbrillig 18 April 2018 в 17:54
поделиться
l=['a', 1, 'b', 2]

print str(l)[1:-1]

Output: "'a', 1, 'b', 2"
3
ответ дан AlvaroAV 18 April 2018 в 17:54
поделиться

@Peter Hoffmann

Используя выражения генератора обладает преимуществом также создания итератора, но сохраняет импорт itertools. Кроме того, понимания списка обычно предпочитаются карте, таким образом, я ожидал бы, что выражения генератора будут предпочтены IMAP.

>>> l = [1, "foo", 4 ,"bar"]
>>> ",".join(str(bit) for bit in l)
'1,foo,4,bar' 
11
ответ дан Aaron Maenpaa 18 April 2018 в 17:54
поделиться

Вот альтернативное решение в Python 3.0, который позволяет объекты несписка строк:

>>> alist = ['a', 1, (2, 'b')]
  • стандартный путь

    >>> ", ".join(map(str, alist))
    "a, 1, (2, 'b')"
    
  • альтернативное решение

    >>> import io
    >>> s = io.StringIO()
    >>> print(*alist, file=s, sep=', ', end='')
    >>> s.getvalue()
    "a, 1, (2, 'b')"
    

ПРИМЕЧАНИЕ: пространство после запятой является намеренным.

14
ответ дан jfs 18 April 2018 в 17:54
поделиться

Почему волшебство карты/лямбды? Разве это не работает?

>>>foo = [ 'a', 'b', 'c' ]
>>>print ",".join(foo)
a,b,c
>>>print ",".join([])

>>>print ",".join(['a'])
a

Редактирование: @mark-biek указывает на случай для чисел. Возможно, понимание списка:

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

больше "pythonic".

Edit2: Спасибо за предложения. Я буду использовать генератор, а не понимание списка в будущем.

>>>','.join(str(x) for x in foo)
64
ответ дан Jim Ferrans 18 April 2018 в 17:54
поделиться

@jmanning2k с помощью понимания списка имеет оборотную сторону создания нового временного списка. Лучшее решение использовало бы itertools.imap, который возвращает итератор

from itertools import imap
l = [1, "foo", 4 ,"bar"]
",".join(imap(str, l))
4
ответ дан Peter Hoffmann 18 April 2018 в 17:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: