Проверьте, присутствуют ли какие-либо два элемента в другом списке - PullRequest
0 голосов
/ 15 января 2019

Как проверить, находятся ли какие-либо два элемента списка в другом списке?

Я пытаюсь выяснить, есть ли в списке определенные комбинации слов. Например:

l1 = ['A', 'B', 'C', 'D', 'E', 'F', 'G']

if all(['A', 'C', 'D']) or all(['A', 'D']) or all(['C', 'D'])in l1:
    print('Violation') 

Идея состоит в том, чтобы определить, существуют ли или (или оба) A и C вместе с D.

Я пробовал приведенный выше код, но я всегда получаю нарушение, так как полагаю, что это тестирование, только если один элемент для любого из контрольных списков находится в пределах L1?

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Я не уверен, что точно понимаю ваш вопрос ...

Этот код проверяет, существуют ли ['A', 'D'] and ['C', 'D'] в l1.

if all(i in l1 for i in ['A', 'D']) and all(i in l1 for i in ['C', 'D']):
    print('Violation')

Если вы хотите or условие,

if all(i in l1 for i in ['A', 'D']) or all(i in l1 for i in ['C', 'D']):
    print('Violation')
0 голосов
/ 15 января 2019

Когда вы говорите, что если все (['A', 'C', 'D']), каждая из букв преобразуется в истинное логическое значение, что делает утверждение all () истинным, и "Violation" будет всегда печататься. Вот способ исправить это:

l1 = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
pattern1 = ['A', 'C', 'D']
pattern2 = ['A', 'D']
pattern3 = ['C', 'D']

for pat in [pattern1, pattern2, pattern3]:
    if all(letter in l1 for letter in pat):
        print("Violation")
        break
0 голосов
/ 15 января 2019

Если вы хотите проверить эти подмножества, вам придется проверять каждый из них отдельно. Ваше использование all также неправильно. all проверяет, являются ли все элементы последовательности, переданные ему, "Truthy" .

all(['A', 'B', 'C'])
# True

Таким образом, ваш if фактически уменьшается до:

if True or True or True in l1:

Выражение замыкает на if True, поэтому всегда выполняется.


Я бы сделал это, выполнив проверку set.issuperset() для каждого подмножества в столбцах df.

subsets = [{'A', 'C', 'D'}, {'A', 'D'}, {'C', 'D'}]
columns = set(df)
if any(columns.issuperset(s) for s in subsets):
    print('Violation')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...