2015-04-30 78 views
-1

每次我跑我的代码,我得到这个错误为什么我的程序显示TypeError?

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

由于您根本没有真正修改您的列表,因此您在假设下操作。 – Shashank

+1

尝试'“”.join([1,2,3])'。怎么了?怎么样'“+”。join(map(str,[1,2,3]))'? – Alan

+0

'str.join'采用'str'序列。 –

回答

0

我想这是更清晰

return "The sum of %s is %s." % (list2, add_list(list1)) 
+0

但是为什么代码显示错误,即使我修改了元素该列表字符串... –

+0

我不不喜欢,你的代码适用于我,如果你修改返回线我写道:在[22]:总结([1,2,3]) 出[22]: '[1,2,3]的总和是6.' – lapinkoira

+0

如果你的意思是你的代码为什么不工作,这是因为“”.join(list2)这是期望的字符串列表,list2是一个整数列表 – lapinkoira

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" 

不过,我建议您尝试了一些关于如何打印这个其他的解决方案,这是不理想的。我只是认为这对你了解错误很有价值。

+0

很好的答案。我还建议给出OP,你可以通过做'str(thing)'把任何东西变成一个字符串。这比使用'str.format'更有效率 – Shashank

相关问题