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

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


当前回答

my_list = ['a', 'b', 'c', 'd']
my_string = ','.join(my_list)
'a,b,c,d'

如果列表包含整数,这将不起作用


如果列表包含非字符串类型(如整数、浮点数、bool、None),则执行以下操作:

my_string = ','.join(map(str, my_list)) 

其他回答

下面是一个带有列表的例子

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

更准确:

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

示例2:

myList = ['Apple','Orange']
myList = ','.join(map(str, myList)) 
print "Output:", myList
Output: Apple,Orange
my_list = ['a', 'b', 'c', 'd']
my_string = ','.join(my_list)
'a,b,c,d'

如果列表包含整数,这将不起作用


如果列表包含非字符串类型(如整数、浮点数、bool、None),则执行以下操作:

my_string = ','.join(map(str, my_list)) 
l=['a', 1, 'b', 2]

print str(l)[1:-1]

Output: "'a', 1, 'b', 2"

",".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'

为什么是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)