我们将如何从字符串列表中创建一个逗号分隔的字符串?
我们最好采用哪种方法来连接序列中的字符串,以便在每两个连续对之间添加一个逗号。也就是说,如何将例如[['a','b','c']映射到'a,b,c'
? (" [s]"和" []"的情况应分别映射到" s"和"''`。)
我通常最终会使用类似'''.join(map(lambda x:x +',',l))[:-1]`之类的东西,但也会感到有些不满意。
编辑:我很as愧,很高兴解决方案如此简单。显然,我几乎不知道自己在做什么。 (过去我可能需要"简单"的连接,并以某种方式记住了s.join([e1,e2,...])作为s + e1 + e2 + ...的简写。)
解决方案
回答
myList = ['a','b','c','d'] myString = ",".join(myList )
如果列表中包含数字,则此方法将无效。
正如Ricardo Reyes所建议的,如果它包含非字符串类型(例如整数,浮点数,布尔值,无),则请执行以下操作:
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:
感谢建议。以后,我将使用生成器而不是列表推导。
>>>','.join(str(x) for x in foo)
回答
你不只是想要:
",".join(l)
显然,如果我们需要在值中引用/转义逗号等,它将变得更加复杂。在这种情况下,我建议我们查看标准库中的csv模块:
https://docs.python.org/library/csv.html
回答
除非我丢失了某些内容,否则'','。join(foo)`应该可以满足要求。
>>> ','.join(['']) '' >>> ','.join(['s']) 's' >>> ','.join(['a','b','c']) 'a,b,c'
(编辑:正如jmanning2k指出的那样,
','.join([str(x) for x in foo])
是更安全且相当Pythonic的,尽管如果元素可以包含逗号,则生成的字符串将很难解析-此时,我们需要csv
模块的全部功能,如Douglas在他的回答中指出的那样。)
回答
使用列表推导的@ jmanning2k不利于创建新的临时列表。更好的解决方案是使用itertools.imap返回一个迭代器
from itertools import imap l = [1, "foo", 4 ,"bar"] ",".join(imap(str, l))
回答
彼得·霍夫曼(Peter Hoffmann)
使用生成器表达式的好处是还可以生成迭代器,但是可以节省导入itertools的时间。此外,列表推导通常首选映射,因此,我希望生成器表达式比imap首选。
>>> l = [1, "foo", 4 ,"bar"] >>> ",".join(str(bit) for bit in l) '1,foo,4,bar'
回答
l=['a', 1, 'b', 2] print str(l)[1:-1] Output: "'a', 1, 'b', 2"
回答
这是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')"
注意:逗号后的空格是有意的。