繁体   English   中英

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

[英]How to check if the list of tuples contains the required elements

如何检查元组列表是否仅包含具有元素的元组 ('name', 'surname', 'adress', 'car', 'colour') 和 ('name', 'surname', 'adress') 元组不能存在带有单个“汽车”和“颜色”

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)

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

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 个字符以下)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM