#python
#python
Вопрос:
Надеюсь получить некоторую помощь. Пытаюсь вернуть True, если в них НЕТ общих элементов, в противном случае False, работая над улучшением моего «минималистского» кодирования (я могу сделать это в нескольких строках, но хочу завершить это в одной или двух строках).
Я могу получить True в одном тесте, но не могу получить False в нескольких тестах, когда они написаны разными способами. Вот что у меня есть на данный момент:
def different(listx, listy):
return any(listx) == any(listy)
Предложения?
Спасибо.
Комментарии:
1. ‘0 == len(set(listx).пересечение(set(listy)))`
2.
all(x not in listy for x in listx)
3. Спасибо за все ответы. На самом деле мне это нравится больше всего. Просто для человека моего уровня квалификации, лол. Приветствия.
Ответ №1:
Вероятно, самый простой способ сделать это — привести каждый список к set
. В документах набор определяется как:
Объект set представляет собой неупорядоченную коллекцию различных хэшируемых объектов.
оттуда проверьте, не пересекаются ли эти наборы, используя isdisjoint
метод.
return set(listx).isdisjoint(set(listy))
Комментарии:
1. Я сделал это более длинным способом. Это лучше.
2. Теперь изучил новый метод. Очень полезно. Спасибо вам всем.
Ответ №2:
Установить пересечение:
print (0 == len(set(listx).intersection(set(listy))))
Ответ №3:
Возможно, не такой производительный, как другие ответы, но, на мой взгляд, более читаемый:
Расширенный метод, помогающий разобраться в операциях:
def different(listx, listy):
"""Will return True if lists don't have any common values."""
n_shared = 0
for x in listx:
if x in listy:
n_shared =1
if n_shared==0:
return True
else:
return False
Более минимальный подход:
def different(listx, listy):
"""Will return True if lists don't have any common values."""
shared = [x for x in listx if x in listy]
if len(shared)==0:
return True
else:
return False