比较Python中两个列表的项目

oli*_*r13 1 python

我读了很多关于相关问题的问题,但没有一个问题能回答我的问题.我有两个清单:

List A = ['nike', 'adidas', 'reebok']

List B = ['sneakers', 'sneaker shoes', 'adidas shoes', 'nike', 'any shoe', 'all nikes', 'a nike shoe']
Run Code Online (Sandbox Code Playgroud)

现在,我想查看列表A的项是否存在于B中的某个位置,以便它返回:

List result: [False, False, True, True, False, True, True]
Run Code Online (Sandbox Code Playgroud)

True表示列表B中与A项匹配的实例.到目前为止,我使用的代码看起来非常低效.

for j in range(len(lista)):
    for k in b:
    if j in k: 
        lista[j] = 'DELETE'

cuent = lista.count('DELETE')

for i in range(cuent):
    lista.remove('DELETE')
Run Code Online (Sandbox Code Playgroud)

在此先感谢,如果确实有这样的答案,我很抱歉 - 一小时后我已经失去了在stackoverflow-universe中找到它的所有希望:)

编辑:抱歉没有让自己清楚 - 我不是在寻找完全匹配,我正在寻找短语匹配.再次抱歉!

geo*_*org 5

也许

keywords = ['nike', 'adidas', 'reebok']
items = ['sneakers', 'sneaker shoes', 'adidas shoes', 'nike', 'any shoe', 'all nikes', 'a nike shoe']
bits = [any(keyword in item for keyword in keywords) for item in items]
Run Code Online (Sandbox Code Playgroud)

或更好

import re
regex = re.compile(r'%s' % '|'.join(keywords))
bits = [bool(regex.search(x)) for x in items]
Run Code Online (Sandbox Code Playgroud)

根据我的理解,你想忽略单词边界(例如"nike"匹配"all nikes"),仅搜索完整单词,将上面的表达式更改为r'\b(%s)\b'.

  • @ oliver13:这被称为"生成器表达式".有关说明,请参阅http://stackoverflow.com/q/1756096/989121. (2认同)