从一个序列中连接字符串,使每两个连续的对之间添加一个逗号,您的首选方法是什么?也就是说,你如何映射,例如,['a', 'b', 'c']到'a,b,c'?(case ['s']和[]应该分别映射为's'和''。)

我通常会用“。”Join (map(lambda x: x+',',l))[:-1],但也感到有些不满意。


当前回答

为什么是map/lambda魔法?这样不行吗?

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

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

如果列表中有数字,你可以使用列表推导式:

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

或者一个生成器表达式:

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

其他回答

我想说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。

为什么是map/lambda魔法?这样不行吗?

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

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

如果列表中有数字,你可以使用列表推导式:

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

或者一个生成器表达式:

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

如果你想做快捷方式:):

','.join([str(word) for word in wordList])

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

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

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

stringText = stringText[:-2]   # get rid of last comma
print(stringText)

",".join(l)并不适用于所有情况。我建议使用StringIO的csv模块

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'
>>> my_list = ['A', '', '', 'D', 'E',]
>>> ",".join([str(i) for i in my_list if i])
'A,D,E'

My_list可以包含任何类型的变量。这样就避免了“A…D,E”的结果。