【发布时间】:2018-09-19 12:44:48
【问题描述】:
这个问题只是出于好奇。假设我有列表x
x = ['a', 'b', 'c', 'd', 'e']
当我列举了这个列表并犯了如下的预期错误时:
for i, x in enumerate(x):
print i + " : " + x
#Should use str(i) and str(x)
可以预见会产生这个错误:
Traceback (most recent call last):
File "<pyshell#26>", line 2, in <module>
print i + " : " + x
TypeError: unsupported operand type(s) for +: 'int' and 'str'
但是x 列表被转换为一个字母字符串'a'。
print x
'a'
我尝试将数字列表x = [1, 2, 3, 4] 和x 转换为1 的整数。
为什么会这样?为什么我使用 str(i) 和 str(x) 时没有发生?
【问题讨论】:
-
因为字符串不能加成整数。
-
整数为计数器,
i,错误信息中的字符串为':'。x在这两种情况下都是一个字符串。从未从列表中删除任何内容。一旦您尝试将i添加到':',它就已经失败了,因此它不会再尝试在此之上添加x。 -
等一下,您的列表名为
x,您还将列表中的值分配给名称x。那是名字的冲突。运行循环后,将名称x重新绑定到列表中的第一项。 -
@roganjosh:注意:它将“工作”,因为循环将运行到完成,因为
x的旧值作为for循环设置的一部分被有效地缓存。也就是说,是的,在循环开始后对x的任何引用都将不再引用原始的可迭代对象,因此虽然它“有效”,但几乎肯定会令人困惑/容易出错。 -
roganjosh 已经解释了由于重复使用名称
x而导致的错误,但无论如何,让print处理转换为字符串和连接会更有效,例如print i, ':', y跨度>
标签: python python-2.7 for-loop enumerate