检查列表中的每个字符串(全部)是否是另一个字符串中至少一个字符串中的子字符串

2024-05-15 03:29:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难检查python列表中的所有字符串是否都是另一个python列表中任何字符串的子集

例如: 我想检查list1的每个字符串(全部)是否至少在list2中的一个字符串中,如果是,请执行一些操作

list1 = ['tomato', 'onions','egg']
list2 = ['Two tomatos', 'two onions','two eggs','salsa']

例如,在本例中,它将返回True


Tags: 字符串true列表eggeggs子集twolist2
3条回答

可以将生成器表达式与any/all函数结合使用:

>>> list1 = ['tomato', 'onions','egg']
>>> list2 = ['Two tomatos', 'two onions','two eggs','salsa']
>>> all(any(i in j for j in list2) for i in list1)
True

如果列表1中的单词存在于列表2中的某个元素中,则可以遍历列表并执行某些操作,例如:

list1 = ['tomato', 'onions','egg']
list2 = ['Two tomatos', 'two onions','two eggs','salsa']
for i in list1:
    for j in list2:
        if i in j:
            print("something to ", i, " and ", j)

您可以使用list comprehensionanyall执行单个命令

list1 = ['tomato', 'onions','egg']
list2 = ['Two tomatos', 'two onions','two eggs','salsa']
result = all([any([keyword in string for string in list2]) for keyword in list1])       

第一个列表理解[keyword in string for string in list2]检查关键字是否至少存在于list2的所有字符串中,并生成布尔值列表。我们使用any来确定是否有任何结果是True

第二个列表理解构建在第一个列表理解[any([keyword in string for string in list2]) for keyword in list1]的基础上,并检查所有关键字在list2的所有字符串中是否最少出现。我们使用all检查所有结果是否都是True

正如@Selcuk所提到的,您可以使用generator expressions更有效地执行此操作:语法非常接近列表理解:

result = all(any(keyword in string for string in list2) for keyword in list1)       

相关问题 更多 >

    热门问题