什么是从序列连接字符串的首选方法,以便在每两个连续对之间添加逗号.也就是说,你如何映射,比如,['a', 'b', 'c']
要'a,b,c'
?(案例['s']
并[]
应分别映射到's'
和''
)
我通常最终会使用类似的东西''.join(map(lambda x: x+',',l))[:-1]
,但也感觉有点不满意.
编辑:我很惭愧和高兴,解决方案是如此简单.显然我几乎不知道我在做什么.(我可能在过去需要"简单"连接,并以某种方式记忆['a', 'b', 'c']
为速记'a,b,c'
.)
my_list = ['a', 'b', 'c', 'd'] my_string = ','.join(my_list)
如果列表包含数字,则无效.
正如里卡多·雷耶斯所建议的,如果它包含非字符串类型(例如整数,浮点数,布尔值,无),那么:
my_string = ','.join(map(str, my_list))
为什么地图/ lambda魔术?这不行吗?
>>> 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)
",".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'
这是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')"
注意:逗号后的空格是故意的.
你不想要:
",".join(l)
显然,如果你需要在值中引用/转义逗号等,它会变得更复杂.在这种情况下,我建议查看标准库中的csv模块:
https://docs.python.org/library/csv.html
@Peter Hoffmann
使用生成器表达式还可以生成迭代器,但可以保存导入的itertools.此外,列表推导通常优先映射,因此,我希望生成器表达式优于imap.
>>> l = [1, "foo", 4 ,"bar"] >>> ",".join(str(bit) for bit in l) '1,foo,4,bar'
>>> my_list = ['A', '', '', 'D', 'E',] >>> ",".join([str(i) for i in my_list if i]) 'A,D,E'
my_list
可能包含任何类型的变量.这避免了结果'A,,,D,E'
.