首页 > 解决方案 > Any 和 All 将 2d 关键字列表与字符串进行比较

问题描述

到目前为止我已经得到了这个,但我的目标是检查字符串中是否有任何嵌套的 ALL 关键字列表。

目前,如果嵌套列表中包含与关键字匹配的任何元素的任何嵌套列表,我都会收到。

如何修改它以输出布尔值或显示任何嵌套列表,但嵌套列表的所有元素都与字符串匹配。

keyword_list = [
    [
        'purple',
        'sp',
        'blue'
    ],
    [
        'splash',
        'rocky'
    ],
    [
        'nike',
        'sacai'
    ]
]

product = "sport apples drinks water banana"


if any([keyword for keyword in keywords if (keyword in str(product).lower())] for keywords in keyword_list) == True:
    print(list([keyword for keyword in keywords if (keyword in str(product).lower())] for keywords in keyword_list))


这是简化版本,虽然有效,但我只是想知道任何更快的方法。

keyword_list = [
    [
        'purple',
        'sp',
        'blue'
    ],
    [
        'splash',
        'rocky'
    ],
    [
        'nike',
        'dr'
    ]
]

product = str("sport apples drinks water banana").lower()

def match(product):
    for keywords in keyword_list:
        keyword_match = 0
        for keyword in keywords:
            if keyword in product:
                keyword_match += 1
                if keyword_match == len(keywords):
                    return True

if match(product) == True:
    print('Yes')
else:
    print('No')

标签: python

解决方案


any()作主循环和all()内循环。

def match(product):
    return any(all(keyword in product for keyword in keywords) for keywords in keyword_list)

match('sport apples drinks water banana') // False
match('blues purple sport rocky') // True

推荐阅读