为什么我的程序显示TypeError?

时间:2015-04-30 14:38:40

标签: python python-3.4

每次运行我的代码时都会出现此错误

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])

2 个答案:

答案 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))