Как сократить запись сравнения значений в списках

Рейтинг: 0Ответов: 2Опубликовано: 07.07.2023

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

 if list1[0] < list2[0] \
            and list1[1] < list2[1] \
            and list1[2] < list2[2]:
        return True
    else:
        return False

Понимаю что решение в лямбде, но где-то ошибка синтаксиса у меня и самостоятельно написать не смог.

Ответы

▲ 2Принят
print(all(a < b for a, b in zip(list1, list2)))

То есть, читаем код буквально: "Вернуть истину, если для всех пар a и b выполняется условие a < b, где a и b - взятые попарно (параллельно) элементы из list1 и list2 [, иначе вернуть ложь].

▲ 0

Не очень красиво, только для 3-элементныцх списков, но для начинающих более понятно:

def compare(list1, list2):
    for i in 0, 1, 2:
        if not list1[i] < list2[i]:
            return False
    return True

Объяснение:

Когда встретится хотя одна пара элементов не удовлетворяет требованию первый < второй, ход функции прекращается и она возвращает False.
Иначе команда return False не исполнится, значит, исполнится команда return True.


Примечание:

Вместо for i in 0, 1, 2: возможно применить for i in range(len(list1)):, чтобы код работал для списков любой (но одинаковой) длины.


Тест:

list1 = [1, 2, 3]
list2 = [4, 5, 3]

compare(list1, list2)        # False