добавить условие if в лямбда-питон3 - PullRequest
0 голосов
/ 21 сентября 2019

Следующий код приводит к синтаксической ошибке.

def closest(lst, k, l):
    return lst[ min(range(len(lst)), key = lambda i: (abs(lst[i][0] - k)) if (lst [i][1] == l) else None)]

h = [ ([3,5],[63, 5]), ([3, 10],[65,10]) ]
lst =[ (3,5), (15,5), (60,5), (15,10), (40,10), (60,10) ]


for z in range(len(h)):
    print(closest(lst, h[z][1][0], h[z][1][1]))

Для [63, 5]) и [65,10] в h, я ожидаю (60,5) и (60,10) в lst соответственно, где h[0][1][1] == lst[2][1] и h[1][1][1] == lst[5][[1] и h[0][1][0]ближайший к lst[2][0] и h[1][1][0] ближайший к lst[5][[1]

1 Ответ

3 голосов
/ 21 сентября 2019

Это ошибка, которую я получаю при запуске вашего кода:

Traceback (most recent call last):
  File ".../test.py", line 9, in <module>
    print(closest(lst, h[z][1][0], h[z][1][1]))
  File ".../test.py", line 2, in closest
    return lst[ min(range(len(lst)), key = lambda i: (abs(lst[i][0] - k)) if (lst [i][1] == l) else None)]
TypeError: '<' not supported between instances of 'NoneType' and 'int'

Эта ошибка говорит о том, что вы пытаетесь сравнить целые числа с None во время выполнения min().Это потому, что лямбда-функция, которую вы используете для параметра key, иногда возвращает int, а иногда None.Чтобы предотвратить эту ошибку, убедитесь, что для всех элементов в коллекции, которую вы пытаетесь свести к минимуму, функция, которую вы используете для параметра key, возвращает значения, которые можно сравнивать друг с другом.Поэтому в этом примере просто возвращайте действительно большое целое число, если вы хотите отклонить элемент как возможный минимум.

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