从一个序列中连接字符串,使每两个连续的对之间添加一个逗号,您的首选方法是什么?也就是说,你如何映射,例如,['a', 'b', 'c']到'a,b,c'?(case ['s']和[]应该分别映射为's'和''。)
我通常会用“。”Join (map(lambda x: x+',',l))[:-1],但也感到有些不满意。
从一个序列中连接字符串,使每两个连续的对之间添加一个逗号,您的首选方法是什么?也就是说,你如何映射,例如,['a', 'b', 'c']到'a,b,c'?(case ['s']和[]应该分别映射为's'和''。)
我通常会用“。”Join (map(lambda x: x+',',l))[:-1],但也感到有些不满意。
当前回答
>>> my_list = ['A', '', '', 'D', 'E',]
>>> ",".join([str(i) for i in my_list if i])
'A,D,E'
My_list可以包含任何类型的变量。这样就避免了“A…D,E”的结果。
其他回答
>>> my_list = ['A', '', '', 'D', 'E',]
>>> ",".join([str(i) for i in my_list if i])
'A,D,E'
My_list可以包含任何类型的变量。这样就避免了“A…D,E”的结果。
我的意见。我喜欢python中更简单的一行代码:
>>> from itertools import imap, ifilter
>>> l = ['a', '', 'b', 1, None]
>>> ','.join(imap(str, ifilter(lambda x: x, l)))
a,b,1
>>> m = ['a', '', None]
>>> ','.join(imap(str, ifilter(lambda x: x, m)))
'a'
它是python的,适用于字符串,数字,None和空字符串。它很短,满足要求。如果列表不包含数字,我们可以使用这个更简单的变体:
>>> ','.join(ifilter(lambda x: x, l))
此外,这个解决方案不创建一个新的列表,而是使用一个迭代器,如@Peter Hoffmann pointing(谢谢)。
下面是一个带有列表的例子
>>> 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
",".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'
下面是Python 3.0中允许非字符串列表项的替代解决方案:
>>> alist = ['a', 1, (2, 'b')]
标准方式 >>> ", "。加入(地图(str,倾斜的)) a, 1, (2, 'b') 替代解决方案 >>>导入IO >>> s = io.StringIO() >>> print(*alist, file=s, sep=', ', end= ") > > > s.getvalue () a, 1, (2, 'b')
注意:逗号后的空格是有意的。