我是python的新手,我在理解它应该如何工作时遇到了一些麻烦。
假设我有一个像这样的for循环:
for row in rows
if row["Title"] == List[row]
do something
给了我list indicies must be integers
的错误。
如果我在每一行中循环,我怎样才能将当前行作为索引来表示?
答案 0 :(得分:4)
您应该了解一些重要的事情,并且您可能会根据您目前提供的代码示例做错。
您正在尝试将行中的元素用作索引。如果你期望这样 是一个整数,你可能需要转换它(即如果它是一个字符串 比如“1”。
除了第1点,你还会为两个不同的东西使用两次。另一个看起来像是你期待它成为一本字典。您可能会在更高的范围覆盖另一个行变量。请参阅底部的示例,因为我似乎无法在项目符号中进行格式化...
如果#Do Something
下面的代码操纵行,这可能会导致灾难性的后果。例如,下面的代码是无限循环。
表示list1中的元素: list1.append(element - 5)
相反,你应该使用,它使用切片表示法复制list1进行迭代,你可以修改你没有迭代的副本。:
for list1 [:]中的元素: list1.append(element - 5)
您正在访问基于索引的其他列表,并且您没有迭代它。你可以很容易地得到一个IndexError。如果要迭代两个列表,请执行此操作或使用itertools等效项。这样您就安全了,但确实需要确保列表的长度相同。
对于element1,element2,在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
答案 1 :(得分:3)
for i, row in enumerate(rows):
# do something
答案 2 :(得分:3)
你可以enumerate()
:
for index, row in enumerate(rows):
if row['Title'] == List[index]:
# Do something
答案 3 :(得分:1)
使用内置函数enumerate
。
for i, row in enumerate(rows):