我们将如何从字符串列表中创建一个逗号分隔的字符串?

时间:2020-03-05 18:47:54  来源:igfitidea点击:

我们最好采用哪种方法来连接序列中的字符串,以便在每两个连续对之间添加一个逗号。也就是说,如何将例如[['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')"

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