Пытается вернуть True, если списки НЕ разделяют элементы, в противном случае False. Минимальный код

#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