【问题标题】:How to check if the list of tuples contains the required elements如何检查元组列表是否包含所需的元素
【发布时间】:2020-03-31 02:57:19
【问题描述】:

如何检查元组列表是否仅包含带有元素的元组 ('name', 'surname', 'adress', 'car', 'color') and ('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')

【问题讨论】:

    标签: python list tuples


    【解决方案1】:

    您想像解决逻辑问题一样解决这个问题。您希望(a)在元组中找到两个值或(b)在元组中都没有值。您几乎可以像这样将该表达式编码为简单的语言:

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

    【讨论】:

    • 两者兼有是 XNOR:return not ('car' in t) ^ ('colour' in t)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-04-30
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      相关资源
      最近更新 更多