从列表创建逗号分隔的字符串

时间:2014-07-03 15:29:47

标签: python string list join

我有一个int列表,想要创建一个以逗号分隔的字符串。以下内容:

x = [3, 1, 4, 1, 5]
y = ",".join(x)

给出错误:

TypeError: sequence item 0: expected string, int found

如何创建字符串?我可以手动将每个元素从int转换为字符串,将其插入到新列表中,然后在这个新列表中进行连接,但我想知道是否有更清晰的解决方案。

3 个答案:

答案 0 :(得分:11)

str.join只接受一个可迭代的字符串,而不是一个整数。来自docs

  

str.join(iterable)

     

返回一个字符串,该字符串是可迭代iterable字符串的串联。

因此,您需要将x中的项目转换为字符串。您可以使用maplist comprehension

x = [3, 1, 4, 1, 5]
y = ",".join(map(str, x))

x = [3, 1, 4, 1, 5]
y = ",".join([str(item) for item in x])

参见下面的演示:

>>> x = [3, 1, 4, 1, 5]
>>>
>>> ",".join(map(str, x))
'3,1,4,1,5'
>>>
>>> ",".join([str(item) for item in x])
'3,1,4,1,5'
>>>

答案 1 :(得分:3)

如果您正在处理的csv文件不是此处的简单示例,请记住,最好使用csv module来读取和写入csv,因为CSV can be surprisingly complex

这是一个写例:

import csv

x = [['Header\n1', 'H 2', 'H 3', 'H, 4'],[1,2,3,4],[5,6,7,8],[9,10,11,12]]

with open('/tmp/test.csv', 'w') as fout:
    writer=csv.writer(fout)
    for l in x:
        writer.writerow(l)

请注意'H, 4'中的嵌入式逗号和'Header\n1'中的嵌入式新行,如果编码不正确,可能需要进行解码操作。

csv模块生成的文件'test.csv':

"Header
1",H 2,H 3,"H, 4"
1,2,3,4
5,6,7,8
9,10,11,12

请注意文件中引用"Header\n1"和“H,4”`以便将来正确解码csv。

现在检查一下你可以回读:

with open('/tmp/test.csv') as f:
    csv_in=[[int(e) if e.isdigit() else e for e in row] 
               for row in csv.reader(f)]

>>> csv_in==x
True

只是说'你通常最好使用库中的工具来获取csv。

答案 2 :(得分:2)

只需将参数修改为join,以便将每个元素转换为字符串:

x = [3, 1, 4, 1, 5]
y = ",".join(str(i) for i in x)