Как разместить оператор возврата для сравнения всех значений в двух списках? - PullRequest
0 голосов
/ 09 апреля 2020

Доброе утро, я пытаюсь выяснить, где я ошибаюсь, сравнивая два списка

def reversed_list(lst1, lst2):
  for index in range(len(lst1)):
    if (lst1[index] != lst2[len(lst2) - 1 - index]):
      return False
    else:
      return True




#Uncomment the lines below when your function is done
print(reversed_list([1, 2, 3], [3, 2, 1]))
print(reversed_list([1, 5, 3], [3, 2, 1]))

Однако я получаю True для обоих значений.

После просмотра форумов Codecacademy, Я считаю, что проблема в том, что моя функция просто выполняет одно сравнение, а затем переходит к оператору return.

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

im с использованием http://pythontutor.com/visualize.html#mode = edit пошагово перебирая код, и я все еще теряюсь. Может кто-нибудь сказать мне, нужно ли мне создать еще один объект для хранения логических значений во время итерации, а затем сравнить их в конце или, если это размещение моей функции возврата?

Спасибо

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

при вызове функции один раз вызывается return, тогда весь процесс и поток кода после оператора return не обрабатываются, и результат передается в зависимости от того, что добавлено с этим оператором return.

in Здесь вы пытаетесь выяснить, являются ли первый и последний элемент list1 и list2 одинаковыми или нет. если не то же самое, вернуть False, а если то же самое, то вернуть true. что неправильно, так как вы проверяете только один элемент и возвращаете результат в соответствии только с этим элементом

фактический подход, то, что вам нужно сделать, проверка находит элемент, который не равен элементу из другого списка, и если один раз такой элемент найден (имеется в виду, что не перевернутый список) затем немедленно прекращает обработку других элементов и возвращает false. если после обработки всего элемента и не возникает ложных условий, это означает, что список обратим, тогда верните True

Ниже приведен ваш исправленный код

# your code goes here
def reversed_list(lst1, lst2):
  if len(lst1)!=len(lst2):
       return False
  for index in range(len(lst1)):
    if (lst1[index] != lst2[len(lst2) - 1 - index]):
      return False
  return True
0 голосов
/ 09 апреля 2020

Проблема в вашем коде состоит в том, что вы возвращаетесь на первой итерации вашего l oop (независимо от того, является ли ваше условие True или False, у вас есть return в вашем блоке кода).

Вы должны изменить свой код на что-то вроде:

def reversed_list(lst1, lst2):
  for index in range(len(lst1)):
    if (lst1[index] != lst2[len(lst2) - 1 - index]):
      return False
  return True

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

def reversed_list(lst1, lst2):
    return lst1 == lst2[::-1]
...