Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从列表中获取精确匹配的索引_Python_String_Indexing_Find_Match - Fatal编程技术网

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