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)
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)
jfs*_*jfs 14
这是Python 3.0中的替代解决方案,它允许非字符串列表项:
>>> alist = ['a', 1, (2, 'b')]
Run Code Online (Sandbox Code Playgroud)
一种标准的方式
>>> ", ".join(map(str, alist))
"a, 1, (2, 'b')"
Run Code Online (Sandbox Code Playgroud)替代解决方案
>>> import io
>>> s = io.StringIO()
>>> print(*alist, file=s, sep=', ', end='')
>>> s.getvalue()
"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)
>>> 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)
小智 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)
@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)