我有一个int列表,想要创建一个以逗号分隔的字符串。以下内容:
x = [3, 1, 4, 1, 5]
y = ",".join(x)
给出错误:
TypeError: sequence item 0: expected string, int found
如何创建字符串?我可以手动将每个元素从int转换为字符串,将其插入到新列表中,然后在这个新列表中进行连接,但我想知道是否有更清晰的解决方案。
答案 0 :(得分:11)
str.join
只接受一个可迭代的字符串,而不是一个整数。来自docs:
str.join(iterable)
返回一个字符串,该字符串是可迭代
iterable
中字符串的串联。
因此,您需要将x
中的项目转换为字符串。您可以使用map
或list 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)