Python 如何检查元组列表是否包含必需的元素

Python 如何检查元组列表是否包含必需的元素,python,list,tuples,Python,List,Tuples,如何检查元组列表是否只包含包含元素的元组 (‘姓名’、‘姓氏’、‘地址’、‘汽车’、‘颜色’)和(‘姓名’、‘姓氏’、‘地址’) 元组不能与单个“car”和“color”一起存在 a =[ ('name', 'surname', 'adres', 'car', 'colour'), ('name', 'surname', 'adres'), ('name', 'surname', 'adres', 'colour'), ('name', 'surname', 'a

如何检查元组列表是否只包含包含元素的元组 (‘姓名’、‘姓氏’、‘地址’、‘汽车’、‘颜色’)和(‘姓名’、‘姓氏’、‘地址’) 元组不能与单个“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')

你要像处理逻辑问题一样解决这个问题。您希望(a)在元组中找到两个值,或者(b)在元组中找不到任何值。您几乎可以将该表达式编码为普通语言,如下所示:

def is_valid(t):
    return ('car' in t and 'colour' in t) or ('car' not in t and 'colour' not in t)

你要像处理逻辑问题一样解决这个问题。您希望(a)在元组中找到两个值,或者(b)在元组中找不到任何值。您几乎可以将该表达式编码为普通语言,如下所示:

def is_valid(t):
    return ('car' in t and 'colour' in t) or ('car' not in t and 'colour' not in t)

在这种情况下,如果您有一个如此小的有效选项列表,您可以采用非常简单的方法,只需检查元组是否是其中之一

valid = {
    ('name', 'surname', 'adres', 'car', 'colour'),
    ('name', 'surname', 'adres')}
for elem in a:
    if elem in valid:
        print(elem)
如果您想通过算法实现,那么首先需要确认元组只包含允许的元素,并且不包含或同时包含
('car','color')
,即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个字符以下)

在这种情况下,如果您有一个如此小的有效选项列表,您可以采用非常简单的方法,只需检查元组是否是其中之一

valid = {
    ('name', 'surname', 'adres', 'car', 'colour'),
    ('name', 'surname', 'adres')}
for elem in a:
    if elem in valid:
        print(elem)
如果您想通过算法实现,那么首先需要确认元组只包含允许的元素,并且不包含或同时包含
('car','color')
,即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个字符以下)

两个或两个都不是XNOR:
不返回('car'在t中)^('color'在t中)
两个或两个都不是XNOR:
不返回('car'在t中)^('color'在t中)