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] =]假
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] =]假