【问题标题】:How do you find the index of an element in an Array on Python while in loop在循环中,如何在 Python 的数组中找到元素的索引
【发布时间】:2011-08-20 17:26:32
【问题描述】:

对不起,我对编程还很陌生,似乎找不到任何与我需要的东西相关的东西......

while i<size(Array):
      for index, k in enumerate(Array1):
             if (k==Array[i]):
                   print index
                   i=i+1

上面的代码显示了一个索引超出范围的输出...... 请注意,Array1 的元素比 Array 少。

我想知道如何在没有错误的情况下运行循环,但我不确定是什么导致了错误。

谢谢!

【问题讨论】:

  • 你的目标是什么(即你想用这段代码解决哪个问题)?

标签: python for-loop indexing while-loop


【解决方案1】:

i 是一个索引,您更新它的频率太高了。移动 i = i+1 的缩进以摆脱索引越界。

while i<size(Array):
      for index, k in enumerate(Array1):
             if (k==Array[i]):
                   print index
      i=i+1

【讨论】:

  • 非常感谢!正是我需要的
【解决方案2】:

如果你只想要第一个索引(或者只有一个索引),那么你可以使用索引函数:

for i in array2:
    if i in array1:
        print array1.index(i)

获取索引列表:

print [array2.index(i) for i in array1 if i in array2]

【讨论】:

    【解决方案3】:

    您可以使用in 成员资格测试运算符来测试一个值是否在列表中:

    Array = [1,2,3,4,5,6,7,8]
    Array1 = [2,9,3,9,1,9,2]
    
    for i, value in enumerate(Array1):
        if value in Array:
            print i
    

    输出

    0
    2
    4
    6
    

    【讨论】:

      【解决方案4】:

      看起来你想打印内部数组中值与输出数组中的值匹配的所有索引:

      array1 = [1,2,3,4,5,6,7,8]
      array2 = [2,9,3,9,1,9,2]
      for i,a1 in enumerate(array1):
          for j,a2 in enumerate(array2):
              if a1 == a2:
                  print j
      

      输出:

      4
      0
      6
      2
      

      如果你想收集索引,你需要一个列表理解:

      print [j for i,a1 in enumerate(array1) for j,a2 in enumerate(array2) if a1 == a2]
      

      输出:

      [4, 0, 6, 2]
      

      或者按排序顺序:

      print sorted(j for i,a1 in enumerate(array1) for j,a2 in enumerate(array2) if a1 == a2)
      

      输出:

      [0, 2, 4, 6]
      

      【讨论】:

        【解决方案5】:
        while i<size(Array):
              for index, k in enumerate(Array1):
                     if (k==Array[i]):
                           print index
                           i=i+1
        

        如果我理解正确,你认为我不应该超过 Array 的大小,因为你有一段时间 i &lt; size(Array) 但是 while 条件只控制循环是否会重复,并不能保证我会在整个循环中保持小于大小。

        您似乎认为这将在数组上循环一次,但因为一个循环在另一个循环内部:循环本身将被重复。

        在这种情况下,对于 Array1 中的每个元素,i 在内部循环内递增一次,这导致它变得太高而无法索引 Array。

        我认为您想要的是同时遍历两个列表。不要通过创建两个循环来做到这一点,您只需要一个循环。

        for index, k in enumerate(Array):
             if k == Array1[index]:
                  print index
        

        一种更好的方法,但对于初学者来说可能更难理解:

        for index, (value1, value2) in enumerate(zip(Array, Array1)):
           if value1 == value2:
                print index
        

        Zip 将两个列表“压缩”在一起,这使得并行迭代这两个列表变得非常容易。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-04
          • 1970-01-01
          • 2021-10-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-04
          • 1970-01-01
          相关资源
          最近更新 更多