你如何从字符串列表中创建逗号分隔的字符串?

mwe*_*den 463 python string list

什么是从序列连接字符串的首选方法,以便在每两个连续对之间添加逗号.也就是说,你如何映射,比如,['a', 'b', 'c']'a,b,c'?(案例['s'][]应分别映射到's''')

我通常最终会使用类似的东西''.join(map(lambda x: x+',',l))[:-1],但也感觉有点不满意.

编辑:我很惭愧和高兴,解决方案是如此简单.显然我几乎不知道我在做什么.(我可能在过去需要"简单"连接,并以某种方式记忆['a', 'b', 'c']为速记'a,b,c'.)

Mar*_*iek 860

my_list = ['a', 'b', 'c', 'd']
my_string = ','.join(my_list)
Run Code Online (Sandbox Code Playgroud)

如果列表包含数字,则无效.


正如里卡多·雷耶斯所建议的,如果它包含非字符串类型(例如整数,浮点数,布尔值,无),那么:

my_string = ','.join(map(str, my_list)) 
Run Code Online (Sandbox Code Playgroud)


jma*_*g2k 67

为什么地图/ lambda魔术?这不行吗?

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

>>> print(','.join(['a']))
a
Run Code Online (Sandbox Code Playgroud)

编辑:@ mark-biek指出数字的情况.也许列表理解:

>>> ','.join([str(x) for x in foo])
Run Code Online (Sandbox Code Playgroud)

更"pythonic".

Edit2:谢谢你的建议.我将来会使用生成器而不是列表理解.

>>> ','.join(str(x) for x in foo)
Run Code Online (Sandbox Code Playgroud)

  • 如果我想要'a,b和c`怎么办? (3认同)

Ric*_*cky 16

",".join(l)不适用于所有情况.我建议将csv模块与StringIO一起使用

import StringIO
import csv

l = ['list','of','["""crazy"quotes"and\'',123,'other things']

line = StringIO.StringIO()
writer = csv.writer(line)
writer.writerow(l)
csvcontent = line.getvalue()
# 'list,of,"[""""""crazy""quotes""and\'",123,other things\r\n'
Run Code Online (Sandbox Code Playgroud)

  • @RonKalian在Python 3中使用`from io import StringIO` (4认同)

jfs*_*jfs 14

这是Python 3.0中的替代解决方案,它允许非字符串列表项:

>>> alist = ['a', 1, (2, 'b')]
Run Code Online (Sandbox Code Playgroud)

注意:逗号后的空格是故意的.


Dou*_*der 11

你不想要:

",".join(l)
Run Code Online (Sandbox Code Playgroud)

显然,如果你需要在值中引用/转义逗号等,它会变得更复杂.在这种情况下,我建议查看标准库中的csv模块:

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


Aar*_*paa 10

@Peter Hoffmann

使用生成器表达式还可以生成迭代器,但可以保存导入的itertools.此外,列表推导通常优先映射,因此,我希望生成器表达式优于imap.

>>> l = [1, "foo", 4 ,"bar"]
>>> ",".join(str(bit) for bit in l)
'1,foo,4,bar' 
Run Code Online (Sandbox Code Playgroud)


Sha*_*eem 7

>>> my_list = ['A', '', '', 'D', 'E',]
>>> ",".join([str(i) for i in my_list if i])
'A,D,E'
Run Code Online (Sandbox Code Playgroud)

my_list可能包含任何类型的变量.这避免了结果'A,,,D,E'.


小智 6

l=['a', 1, 'b', 2]

print str(l)[1:-1]

Output: "'a', 1, 'b', 2"
Run Code Online (Sandbox Code Playgroud)

  • 我认为您应该指出,与本页上的其他解决方案不同,您也引用字符串。 (2认同)

小智 6

如果你想走捷径:):

','.join([str(word) for word in wordList])
Run Code Online (Sandbox Code Playgroud)

但如果你想用逻辑来炫耀:):

wordList = ['USD', 'EUR', 'JPY', 'NZD', 'CHF', 'CAD']
stringText = ''

for word in wordList:
    stringText += word + ','

stringText = stringText[:-2]   # get rid of last comma
print(stringText)
Run Code Online (Sandbox Code Playgroud)


Pet*_*ann 5

@jmanning2k 使用列表推导式具有创建新临时列表的缺点。更好的解决方案是使用 itertools.imap 返回一个迭代器

from itertools import imap
l = [1, "foo", 4 ,"bar"]
",".join(imap(str, l))
Run Code Online (Sandbox Code Playgroud)


小智 5

这是一个带有列表的示例

>>> myList = [['Apple'],['Orange']]
>>> myList = ','.join(map(str, [i[0] for i in myList])) 
>>> print "Output:", myList
Output: Apple,Orange
Run Code Online (Sandbox Code Playgroud)

更准确的:-

>>> myList = [['Apple'],['Orange']]
>>> myList = ','.join(map(str, [type(i) == list and i[0] for i in myList])) 
>>> print "Output:", myList
Output: Apple,Orange
Run Code Online (Sandbox Code Playgroud)

示例 2:-

myList = ['Apple','Orange']
myList = ','.join(map(str, myList)) 
print "Output:", myList
Output: Apple,Orange
Run Code Online (Sandbox Code Playgroud)