Для L oop, почему индекс выходит за пределы диапазона? - PullRequest
0 голосов
/ 10 марта 2020

Напишите функцию с именем same_values(), которая принимает два списка чисел одинакового размера в качестве параметров. Функция должна возвращать список индексов, где значения были равны lst1 и lst2. Например, следующий код должен вернуть

[0, 2, 3]

same_values([5, 1, -10, 3, 3], [5, 10, -10, 3, 5])

Моя первоначальная попытка:

def same_values(lst1, lst2):
  new_list=[]
  for i in lst1:
    for j in lst2:
      if lst1[i] == lst2[j]:
        new_list.append(lst1[i])
  return new_list

Я нашел решение, которое:

def same_values(lst1, lst2):
  new_lst = []
  for index in range(len(lst1)):
    if lst1[index] == lst2[index]:
      new_lst.append(index)
  return new_lst

, но мне интересно почему моя первоначальная попытка недействительна (в ней указано, что индекс списка находится за пределами диапазона, который я не получаю в этом случае). Спасибо всем за помощь!

Ответы [ 3 ]

1 голос
/ 10 марта 2020

Просто попробуйте:

lst1 = [5, 1, -10, 3, 3]
for i in lst1:
    print(i)

Вы фактически перебираете значения в списке, а не в индексах.

0 голосов
/ 10 марта 2020

У вас есть 2 основных проблемы (т.е. go против постановки проблемы) с вашими логами c:

  1. Вы сравниваете каждое значение в списке 1 с каждым значением в списке 2. Таким образом, если вы используете следующие списки [10,1,10,1,10] и [1,10,1,10,1], ваш код будет определять все 5 позиций как положительные попадания

  2. Вместо записи индекса или позиции, где вы получаете положительный удар, вы записываете соответствующее значение из списка 1. В вашем примере вместо [0,2,3] вы получите [5, -10 , 3]

Как говорится, вы пытались запустить свой код? Было бы очень полезно, если бы вы на самом деле отлаживали свой код и проходили через каждую операцию.

0 голосов
/ 10 марта 2020

В приведенном ниже условии i рассматривается как значение массива. поэтому я буду 5,1, -1, которые являются недопустимыми индексами

def same_values(lst1, lst2):
  new_list=[]
  for i in lst1:
    for j in lst2:
      if lst1[i] == lst2[j]:
        new_list.append(lst1[i])
  return new_list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...