Сравнение элементов в двух списках в python - PullRequest
0 голосов
/ 25 октября 2018

У меня есть функция, которая сравнивает элементы двух списков и возвращает разницу между ними.У меня есть две версии этого.Первый работает, но не второй.Что не так со второй функцией?Входы a и b представляют собой два списка одинаковой длины.

def compareLists(a, b):
    A = sum([1 if i > j else 0 for i, j in zip(a, b)])
    B = sum([1 if j > i else 0 for i, j in zip(a, b)])
    return (A, B)

def compareLists(a, b):
    A = sum([1 for i in range(0, len(a)) if a[i] > b[i] else 0])
    B = sum([1 for i in range(0, len(a)) if b[i] > a[i] else 0])
    return (A, B)

Например, вход и выход: a = [1, 2, 3,4];b = [0, -2, 5, 6];output = (2, 2)

1 Ответ

0 голосов
/ 25 октября 2018

Вам не нужен троичный оператор (if-else) во втором коде, поскольку использование выражения if в понимании списка позволяет фильтровать выходные данные:

A = sum([1 for i in range(0, len(a)) if a[i] > b[i]])
B = sum([1 for i in range(0, len(a)) if b[i] > a[i]])

Добавление else как и во втором коде, синтаксис становится недействительным.

Для полноты, как отметил @wim в комментарии, использование троичного оператора в вашем первом коде не нужно, так как логические значения в Pythonпросто целые числа 1 и 0, так что вы можете вместо этого вывести логические значения, возвращаемые операторами сравнения:

A = sum([i > j for i, j in zip(a, b)])
B = sum([j > i for i, j in zip(a, b)])
...