Как найти индекс элемента в массиве на Python в то время как в цикле - PullRequest
3 голосов
/ 07 мая 2011

Извините, но я довольно новичок в программировании и, похоже, не могу найти ничего, что относится к тому, что мне нужно ...

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

Приведенный выше код представляет вывод с индексом за пределами ... Обратите внимание, что Array1 имеет меньше элементов, чем Array.

Мне интересно, как можно было бы запустить цикл без ошибки, и я не совсем уверен, что является причиной ошибки.

Спасибо!

Ответы [ 5 ]

1 голос
/ 07 мая 2011

Проверить наличие значения в списке можно с помощью оператора проверки членства 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
1 голос
/ 07 мая 2011

Если вам нужен только первый индекс (или будет только один индекс), вы можете использовать функцию индекса:

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 голос
/ 07 мая 2011

Я - индекс, и вы обновляете его слишком часто.Переместите отступ i = i + 1, чтобы избавиться от индекса за пределами границ.

while i<size(Array):
      for index, k in enumerate(Array1):
             if (k==Array[i]):
                   print index
      i=i+1
0 голосов
/ 07 мая 2011
while i<size(Array):
      for index, k in enumerate(Array1):
             if (k==Array[i]):
                   print index
                   i=i+1

Если я правильно понимаю, вы думаете, что я не должен превышать размер массива, потому что у вас есть какое-то время i < size(Array) Но условие while только контролирует, будет ли цикл повторяться, оно не гарантируетчто я останусь меньше, чем размер на протяжении всего цикла.

Вы, кажется, думаете, что это будет циклически проходить по массивам один раз, но поскольку один цикл находится внутри другого: сам цикл будет повторяться.

В этом случае i увеличивается внутривнутренний цикл по одному разу для каждого элемента в Array1, что приводит к тому, что он становится слишком высоким для индексации 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"объединяет" два списка вместе, что делает очень простым итерацию по обоим параллельно.

0 голосов
/ 07 мая 2011

Выглядит так, как будто вы хотите напечатать все индексы во внутреннем массиве, где значение соответствует значению в выходном массиве:

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...