Ошибка выхода за границы для функции сравнения двух списков - PullRequest
0 голосов
/ 31 октября 2019

Я должен создать функцию, которая сравнивает два списка, находит индекс, по которому они отличаются, и затем возвращает список, который имеет меньшее значение по индексу, в котором они начинают различаться

Вотчто у меня есть.

def function(foo):
    i = 0
    while a[i] == b[i] and i<min(len(a), len(b)):
        i+=1
    if a[i] < b[i]:
        return a 
    else:
        return b

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

У тебя почти было это. Вы получаете ошибку выхода за границы, потому что в вашем цикле while вы проверяете индексы a и b ПОСЛЕ того, как вы уже увеличили значение i.

С некоторыми незначительными изменениями вы, в основном, получили его.

Вот ваш способ немного подправлен:

l1=[1,2,3,4]
l2=[1,2,4]

def foo(a, b):
    i = 0
    while i <  min(len(a), len(b)):
        if a[i] < b[i]:
            return a

        if a[i] > b[i]:
            return b
        i+=1

print(foo(l1, l2))

Напечатает

[1,2,3,4]

Примечание ... вы должны рассмотреть случай, когда l1 = [1,2,3,4] и l2 = [1,2,3]. Что вы на самом деле хотите вернуть? Если мы будем придерживаться вашего оператора else, то l2 (или b) вернется. С моим твиком это вернет None.

0 голосов
/ 31 октября 2019

Я предполагаю, что вы хотите взять a и b в качестве аргументов функции, а не foo ... Я бы взял длину самого короткого списка и перебрал бы его диапазон, который бы дал:

def function(a, b):
    n = min(len(a), len(b))
    for i in range(n):
        if a[i] != b[i]:
            return a if min(a[i], b[i]) == a[i] else b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...