每次运行我的代码时都会出现此错误
TypeError: sequence item 0: expected str instance, int found
即使我已将列表中的每个元素转换为字符串,错误也会显示。请帮我解决这个问题。代码是
def add_list(list1):
m=0
for x in list1:
m=m+x
return m
def summarize(list2):
list1 = list2
for x in list2:
x = "{}".format(x)
return "The sum of {} is {}.".format("".join(list2), add_list(list1))
summarize([1,2,3])
答案 0 :(得分:1)
当你在一个不可变对象列表(例如字符串或数字)上运行for循环时,实际上它实际上是一个副本。它并没有将实际元素本身排除在列表之外。这意味着
for x in list2:
x = "{}".format(x)
什么都不改变,因为发生的事情可以像这样详细地写出来:
for x in list2:
>>> x = list[0]
x = "{}".format(x)
>>> x = list[1]
x = "{}".format(x)
>>> x = list[2]
x = "{}".format(x)
您经常更改x,但这对列表的元素没有任何作用。如果你想循环遍历列表的元素,你需要这样做
for i,x in enumerate(list2):
list[i] = "{}".format(x)
以这种格式,'我'将被设置为x当前元素的索引,以便您可以返回列表中的实际位置并在那里进行编辑,这将导致列表本身发生变化。
你也可以使用str(x)把东西变成字符串,它更干净。它也适用于任何数据类型,因此您可以随时打印
>>> str([12,1,"abba"])
"[12,1,'abba']"
>>> str(open("I'm a file.txt",'r'))
"<open file 'I'm a file.txt', mode 'r' at 0x0000000002ADC420>"
>>> str(None)
"None"
但是我建议尝试一些其他解决方案来解决这个问题,这不是理想的选择。我只是觉得理解错误对你很有价值。
答案 1 :(得分:0)
我认为这更清楚
return "The sum of %s is %s." % (list2, add_list(list1))