如果比较

时间:2011-12-10 20:59:04

标签: python iteration

我是python的新手,我在理解它应该如何工作时遇到了一些麻烦。

假设我有一个像这样的for循环:

for row in rows
    if row["Title"] == List[row] 
         do something

给了我list indicies must be integers的错误。

如果我在每一行中循环,我怎样才能将当前行作为索引来表示?

4 个答案:

答案 0 :(得分:4)

应该了解一些重要的事情,并且您可能会根据您目前提供的代码示例做错。

  1. 您正在尝试将行中的元素用作索引。如果你期望这样 是一个整数,你可能需要转换它(即如果它是一个字符串 比如“1”。

  2. 除了第1点,你还会为两个不同的东西使用两次。另一个看起来像是你期待它成为一本字典。您可能会在更高的范围覆盖另一个行变量。请参阅底部的示例,因为我似乎无法在项目符号中进行格式化...

  3. 如果#Do Something下面的代码操纵行,这可能会导致灾难性的后果。例如,下面的代码是无限循环。

    表示list1中的元素:     list1.append(element - 5)

    相反,你应该使用,它使用切片表示法复制list1进行迭代,你可以修改你没有迭代的副本。:

    for list1 [:]中的元素:     list1.append(element - 5)

  4. 您正在访问基于索引的其他列表,并且您没有迭代它。你可以很容易地得到一个IndexError。如果要迭代两个列表,请执行此操作或使用itertools等效项。这样您就安全了,但确实需要确保列表的长度相同

    对于element1,element2,在zip(list1,list2)中:     通

  5. 其他人告诉你使用枚举...而不是实际查看你的代码这确实回答了你的问题,但它只是糖和常见的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):