Как проверить, содержит ли список кортежей необходимые элементы - PullRequest
0 голосов
/ 30 марта 2020

Как проверить, содержит ли список кортежей только кортежи с элементами («имя», «фамилия», «адрес», «автомобиль», «цвет») и («имя», «фамилия», «адрес») кортеж не может существовать с одним 'car' и 'color'

a =[
    ('name', 'surname', 'adres', 'car', 'colour'),
    ('name', 'surname', 'adres'),
    ('name', 'surname', 'adres', 'colour'),
    ('name', 'surname', 'adres', 'car')
]

for elem in a:
    if 'car' not in elem and 'colour' not in elem:
        print(elem)

ниже кортежей все в порядке:

('name', 'surname', 'adres', 'car', 'colour') 
('name', 'surname', 'adres')

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

Вы хотите решить эту проблему, как проблему логики c. Вы хотите, чтобы (а) вы нашли оба значения в кортеже или (б) ни одно значение в кортеже. Вы можете почти закодировать это выражение в простой язык, например:

def is_valid(t):
    return ('car' in t and 'colour' in t) or ('car' not in t and 'colour' not in t)
0 голосов
/ 30 марта 2020

В этом случае, когда у вас есть такой небольшой список допустимых опций, вы можете использовать простой простой подход и просто проверить, является ли кортеж одним из них.

valid = {
    ('name', 'surname', 'adres', 'car', 'colour'),
    ('name', 'surname', 'adres')}
for elem in a:
    if elem in valid:
        print(elem)

Если вы хотите это сделать алгоритмически, затем сначала вам нужно будет подтвердить, что кортеж содержит только разрешенные элементы и не содержит ни одного, ни обоих из ('car', 'colour'), то есть XNOR.

allowed = {'name', 'surname', 'adres', 'car', 'colour'}
for elem in a:
    if not all(x in allowed for x in elem):
        continue
    if ('car' in elem) ^ ('colour' in elem):
        continue
    print(elem)

(я разбил его, чтобы сохранить строки до 80 символов)

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