2011-05-07 130 views
3

對不起,但我是相當新的節目,似乎無法找到任何關於我需要什麼...你如何找到一個元素的索引在Python中的數組,而在循環

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

上面的代碼提供了一個輸出,其索引超出了界限... 請注意,Array1中的元素少於Array。

我想知道如何運行循環沒有錯誤,我真的不知道是什麼導致錯誤。

謝謝!

+6

你的目標是什麼(即你試圖用這段代碼解決哪個問題)? – 2011-05-07 12:17:04

回答

1

我是一個索引,你經常更新它。移動i = i + 1的縮進來擺脫索引越界。

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

感謝堆!正是我需要的 – PythonAlex 2011-05-07 15:16:23

0

看起來好像要打印所有索引的內部數組,其中值輸出數組中的值相匹配:

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] 
1

如果你只想要第一個索引(或只會有一個索引),然後你可以使用索引功能:

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

要獲得指數列表:

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

您可以測試一個值是否在列表中使用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 
0
while i<size(Array): 
     for index, k in enumerate(Array1): 
      if (k==Array[i]): 
        print index 
        i=i+1 

如果我理解正確,你認爲我不應該超過A的大小因爲你有一段時間i < size(Array)但是,雖然條件只控制循環是否會重複,但並不能保證我在整個循環中的大小保持不變。

你似乎認爲這將循環數組一次,但因爲一個循環在另一個循環內:循環本身將被重複。

在這種情況下,對於Array1中的每個元素,i都會在內部循環內部遞增一次,這會導致其對索引數組變得過高。

我想你想要的是在同一時間迭代兩個列表。不要通過創建兩個循環來完成,你只需要一個循環。

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 

拉鍊「拉鍊」兩個列表一起,這使得它很容易在兩者並行遍歷。

相關問題