Python 从列表中获取精确匹配的索引
我希望结果是:Python 从列表中获取精确匹配的索引,python,string,indexing,find,match,Python,String,Indexing,Find,Match,我希望结果是: 0 3 我想得到“精确”匹配的索引。我需要做什么才能得到可接受的结果?只需将中的更改为=,并使测试有点不同,如下所示: 0 这里请注意,我直接迭代lst,并从enumerate获取索引。这是一种比引入一个只跟踪索引的变量i更具python风格的方法。如其他答案中的一行代码所示,您可以将其进一步压缩。尝试将更改为以下内容(lst[i]中的项目用于键中的项目):: lst = ['a', 'b', 'c', 'aa', 'bb', 'cc'] def findexact(lst
0
3
我想得到“精确”匹配的索引。我需要做什么才能得到可接受的结果?只需将中的
更改为=
,并使测试有点不同,如下所示:
0
这里请注意,我直接迭代lst
,并从enumerate获取索引。这是一种比引入一个只跟踪索引的变量i
更具python风格的方法。如其他答案中的一行代码所示,您可以将其进一步压缩。尝试将更改为以下内容(lst[i]中的项目用于键中的项目):
:
lst = ['a', 'b', 'c', 'aa', 'bb', 'cc']
def findexact(lst):
key = ['a','g','t']
for idx, elem in enumerate(lst):
if any(item == elem for item in key):
print idx
findexact(lst)
您得到了多个结果,因为'a'在
'aa'中是,但'a'不是=
到'aa'
这是否为您提供了所需的行为?只需使用index()
。这将告诉您给定列表中给定项的索引。如果它不存在,它将产生一个错误,我们将捕获它
if any(item == lst[i] for item in key):
可以将enumerate与gen exp一起使用,使用默认值调用next以捕获没有公共元素的位置:
lst = ['a', 'b', 'c', 'aa', 'bb', 'cc']
def findexact(lst):
keys = ['a','g','t']
for key in keys:
try:
return lst.index(key)
except ValueError:
pass
print findexact(lst)
这是O(n)
,因为设置查找是O(1)
,在最坏的情况下,我们查看lst中的每个元素,对于大量数据,使用list.index或将键作为列表,并在中使用将无法很好地扩展为什么您要使用相同的非工作算法?如此简单。我喜欢你的回答。我不知道为什么我以前没有想到这一点。
lst = ['a', 'b', 'c', 'aa', 'bb', 'cc']
def findexact(lst):
keys = ['a','g','t']
for key in keys:
try:
return lst.index(key)
except ValueError:
pass
print findexact(lst)
def findexact(lst):
key = {'a','g','t'}
return next((ind for ind,ele in enumerate(lst) if ele in key), None)
lst = ['a', 'b', 'c', 'aa', 'bb', 'cc']
match = findexact(lst)
if match is not None:
print(match)
0