你将如何从列表中逗号分隔的string?

你会喜欢什么样的方式来连接序列中的string,以便在每两个连续的对之间添加一个逗号。 也就是说,你如何将[ 'a', 'b', 'c' ]映射到'a,b,c' ? (案例[ s ][]应分别映射到s'' )。

我通常最终会使用像''.join(map(lambda x: x+',',l))[:-1] ,但也有点不满意。

编辑:我很惭愧和高兴,解决scheme是如此简单。 显然我不知道我在做什么。 (我以前可能需要“简单”连接,并以某种方式记住s.join([e1,e2,...])作为s+e1+e2+...的简写。)

 myList = ['a','b','c','d'] myString = ",".join(myList ) 

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


正如里卡多·雷耶斯 ( Ricardo Reyes)所build议的那样,如果它包含非stringtypes(例如整数,浮点数,布尔值,无)

 myList = ','.join(map(str, myList)) 

为什么地图/ 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”。

编辑2:感谢您的build议。 我将在未来使用生成器而不是列表理解。

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

你不只是想要:

 ",".join(l) 

显然它会变得更复杂,如果你需要引用/转义逗号等值。 在这种情况下,我会build议看看标准库中的csv模块:

https://docs.python.org/library/csv.html

彼得·霍夫曼

使用生成器expression式的好处还在于生成一个迭代器,但保存了导入itertools。 此外,列表parsing通常是首选映射,因此,我希望生成器expression式优先于imap。

 >>> l = [1, "foo", 4 ,"bar"] >>> ",".join(str(bit) for bit in l) '1,foo,4,bar' 

这是Python 3.0中的一个替代解决scheme,它允许非string列表项:

 >>> alist = ['a', 1, (2, 'b')] 
  • 一个标准的方式

     >>> ", ".join(map(str, alist)) "a, 1, (2, 'b')" 
  • 替代解决scheme

     >>> import io >>> s = io.StringIO() >>> print(*alist, file=s, sep=', ', end='') >>> s.getvalue() "a, 1, (2, 'b')" 

注:逗号后的空格是有意的。

",".join(l)将不适用于所有情况。 我build议与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' 

使用列表理解@ jmanning2k有创build一个新的临时列表的缺点。 更好的解决scheme将使用itertools.imap返回一个迭代器

 from itertools import imap l = [1, "foo", 4 ,"bar"] ",".join(imap(str, l)) 

转换包含数字的列表,请执行以下操作:

 string = ''.join([str(i) for i in list]) 

除非我错过了一些东西,否则','.join(foo)应该做你想要的东西。

 >>> ','.join(['']) '' >>> ','.join(['s']) 's' >>> ','.join(['a','b','c']) 'a,b,c' 

(编辑:正如jmanning2k指出的那样,

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

是更安全和相当Pythonic,尽pipe如果元素可以包含逗号,结果string将很难parsing – 在这一点上,你需要csv模块的全部力量,道格拉斯在他的答案中指出)。

 l=['a', 1, 'b', 2] print str(l)[1:-1] Output: "'a', 1, 'b', 2" 
 >>> my_list = ['A', '', '', 'D', 'E',] >>> ",".join([str(i) for i in my_list if i]) 'A,D,E' 

my_list可能包含任何types的variables。 这避免了结果'A,,,D,E'

这是一个列表的例子

 >>> 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