Python - 如果有 "exact" 匹配则返回值?

Python - Returning the value if there is an "exact" match?

lst = ['a', 'b', 'c', 'aa', 'bb', 'cc']

def findexact(lst):
    i=0
    key = ['a','g','t']
    while i < len(lst):
        if any(item in lst[i] for item in key):
            print lst[i]
        i+=1

findexact(lst)

在上面的代码中,结果是:

'a'
'aa'

我希望结果是:

'a'

如何正确使用 any() 以获得正确的结果?

根据我对您问题的解释,您似乎想查找 key 中的哪个项目在 lst 中。这将是这样做的方式:

def findexact(lst):
    key = ['a','g','t']
    for k in key:
        if k in lst:
            print k
            return k

您不需要做所有的索引。

def findexact(lst):
    key = ['a','g','t']
    for item in (set(key) & set(lst)):
        return item
lst = ['a', 'b', 'c', 'aa', 'bb', 'cc']
def findexact(lst):
    i=0
    key = ['a','g','t']
    for eachItm in lst:
        if eachItm in key:
            print eachItm

findexact(lst)

这应该可以满足您的要求

最简单的方法是使用Python的内置集合交集:

lst = ['a', 'b', 'c', 'aa', 'bb', 'cc']
key = ['a','g','t']

for item in set(lst).intersection(key):
    print item

输出

a

将其放入 returns 完全匹配的函数中:

def findexact(lst):
    key = ['a','g','t']
    return set(lst).intersect(key)

或进入 returns True 如果至少有一个完全匹配的函数:

def findexact(lst):
    key = ['a','g','t']
    return bool(set(lst).intersect(key))

这个:

item in lst[i] for item in key

查找列表每个元素的内部键的每个元素。并在 'a' 内部和 'aa' 内部找到 'a'。它没有在 lst.

的任何元素内找到 'g' 或 't'

为了匹配您的预期输出,您不能使用 set.intersection 因为集合是 无序的 所以如果您得到 a 作为第一项,它完全是有机会,您应该将 key 设为一个集合并使用 in,遍历列表 return 将保持顺序的第一个匹配项:

def findexact(lst):
    key = {'a','g','t'}
    for ele in lst:
        if ele in key:
            return ele
    return False

如果你想获得所有匹配项并查看不匹配项,只需将键设置为一个集合并使用循环即可:

def findexact(lst):
    key = {'a','g','t'}
    for ele in lst:
        if ele in key:
            print(ele)
        else:
            # do whatever

如果你想 return 一个基于是否有共同元素的 bool 使用 set.isdisjoint:

def findexact(lst):
    key = {'a','g','t'}
    return not key.isdisjoint(lst)

如果至少有一个匹配项,函数将为 return True,如果没有,则集合不相交,因此它将 return False。

如果你想要索引使用枚举:

def findexact(lst):
    key = {'a','g','t'}
    for ind,ele in enumerate(lst):
        if ele in key:
            return ind, ele
    return False

如果我们有匹配项,那么元素和索引都会 return,如果你只想要索引 return ind,如果没有匹配项,我们只需 [=34] =]假