我是 python 的新手,我在理解它应该如何工作时遇到了一些麻烦。
假设我有一个这样的 for 循环:
for row in rows
if row["Title"] == List[row]
do something
给我的错误是 list indicies must be integers
。
如果我循环遍历每一行,如何将我所在的当前行表示为索引?
最佳答案
您应该了解一些重要的事情,根据您目前提供的代码示例,您可能做错了。
您正在尝试使用行中的元素作为索引。如果你期望这个 要成为一个整数,您可能需要将其转换(即,如果它是一个字符串 像“1”)。
除了第 1 点之外,您还两次使用行来处理两件不同的事情。另一个看起来像你期望它是一本字典。您可能会在更高范围内覆盖另一个行变量。请参阅底部的示例,因为我似乎无法在要点中很好地格式化...
如果
#Do Something
下面的代码操作行,这可能会导致灾难性的后果。例如,下面的代码是一个无限循环。对于 list1 中的元素: list1.append(元素 - 5)
相反,您应该使用,它使用切片表示法制作 list1 的副本进行迭代,您可以修改未迭代的副本。:
对于 list1[:] 中的元素: list1.append(元素 - 5)
您正在访问基于索引的不同列表,而不是对其进行迭代。你可以很容易地得到一个 IndexError 这样做。如果您想遍历两个列表,请这样做或使用 itertools相等的。这样您就安全了,但您确实需要确保列表的长度相同。
对于 element1, element2, in zip(list1, list2): 通过
其他人告诉您使用枚举...而无需实际查看您的代码,这确实回答了您的问题,但这只是糖分和常见的 Python 习惯用法。这是它的工作原理。
help(enumerate)
Help on class enumerate in module __builtin__:
class enumerate(object)
| enumerate(iterable[, start]) -> iterator for index, value of iterable
|
| Return an enumerate object. iterable must be another object that supports
| iteration. The enumerate object yields pairs containing a count (from
| start, which defaults to zero) and a value yielded by the iterable argument.
| enumerate is useful for obtaining an indexed list:
| (0, seq[0]), (1, seq[1]), (2, seq[2]), ...
我相信您可以想出其他方法来实现同样的目标。
上述第 2 点的示例。
In [71]: list1
Out[71]: [1, 2, 3, 4, 5, -4, -3, -2, -1, 0]
In [72]: x = 5
In [73]: for x in list1:
...: pass
In [74]: x
Out[74]: 0
关于python - 如果比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8459824/