Есть ли лучший способ сравнить два списка в Python, остановившись на более коротком списке? - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь сравнить два списка с логикой короткого замыкания, так что если один список короче другого, остановите сравнение и верните True. Я хотел бы знать, является ли то, что у меня есть, достаточно Pythonic или есть лучший способ сделать это.

def compareLists(list1,list2):
    # Comparison invalid if either list is empty
    if not list1 or not list2:
        return False

    equalList = True    # initialize as true
    for (l1,l2) in zip(list1,list2):
        if l1 != l2:
            equalList = False
            break
    return equalList
ipdb> list1 = [1,2,3]
ipdb> list2 = [1,2,3,4]    
ipdb> compareLists(list1,list2)
True

Ответы [ 2 ]

1 голос
/ 21 октября 2019

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

def compareLists(list1, list2):
    L=min(len(list1), len(list2))
    return list1[:L]==list2[:L]

следующие возвраты True:

lista=[1,3,4,6,7,8,4,6]
listb=[1,3,4,6,7,8,4,6,3,7,5,2,4]
print (compareLists(lista, listb))

Принимая во внимание, что следующие возвраты False:

lista=[1,3,4,6,7,-8,4,6]
listb=[1,3,4,6,7,8,4,6,3,7,5,2,4]
print (compareLists(lista, listb))
1 голос
/ 21 октября 2019

Более питоническим способом было бы использовать all:

def compare_lists(list1, list2):
    if not list1 or not list2:
        return False
    else:
        return all(x1 == x2 for x1, x2 in zip(list1, list2))

Также обратите внимание, что соглашение об именах в Python - не случай верблюда, а случай змеи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...