3959

给定一个列表["foo", "bar", "baz"]和列表中的一个项目"bar",我如何1在 Python 中获取它的索引 ()?

4

39 回答 39

5475
>>> ["foo", "bar", "baz"].index("bar")
1

参考:数据结构 > 更多关于列表

警告如下

请注意,虽然这可能是回答所问题的最干净的方法,但它是 APIindex的一个相当薄弱的组件list,我不记得我上次在愤怒中使用它是什么时候了。评论中已向我指出,由于此答案被大量引用,因此应使其更加完整。list.index关于跟随的一些注意事项。最初可能值得看一下它的文档:

list.index(x[, start[, end]])

返回值等于x的第一项的列表中从零开始的索引。ValueError如果没有这样的项目,则引发 a 。

可选参数startend被解释为切片符号,用于将搜索限制为列表的特定子序列。返回的索引是相对于完整序列的开头而不是 start 参数计算的。

列表长度的线性时间复杂度

调用按顺序检查列表中的index每个元素,直到找到匹配项。如果您的列表很长,并且您不知道它在列表中的大致位置,则此搜索可能会成为瓶颈。在这种情况下,您应该考虑不同的数据结构。请注意,如果您大致知道在哪里可以找到匹配项,您可以给出index提示。例如,在这个片段中,l.index(999_999, 999_990, 1_000_000)大约比 Straight 快五个数量级l.index(999_999),因为前者只需要搜索 10 个条目,而后者搜索一百万个:

>>> import timeit
>>> timeit.timeit('l.index(999_999)', setup='l = list(range(0, 1_000_000))', number=1000)
9.356267921015387
>>> timeit.timeit('l.index(999_999, 999_990, 1_000_000)', setup='l = list(range(0, 1_000_000))', number=1000)
0.0004404920036904514
 

仅将第一个匹配项的索引返回到其参数

调用index按顺序搜索列表,直到找到匹配项,然后停在那里。如果您希望需要更多匹配项的索引,则应使用列表推导式或生成器表达式。

>>> [1, 1].index(1)
0
>>> [i for i, e in enumerate([1, 2, 1]) if e == 1]
[0, 2]
>>> g = (i for i, e in enumerate([1, 2, 1]) if e == 1)
>>> next(g)
0
>>> next(g)
2

大多数我曾经使用过的地方index,现在我使用列表推导式或生成器表达式,因为它们更通用。因此,如果您正在考虑使用index,请查看这些出色的 Python 功能。

如果元素不存在于列表中,则抛出

如果项目不存在,则调用index结果为 a 。ValueError

>>> [1, 1].index(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 2 is not in list

如果该项目可能不在列表中,您应该

  1. item in my_list首先使用(干净,可读的方法)检查​​它,或者
  2. index将调用包装在一个try/except可以捕获的块中ValueError(可能更快,至少当要搜索的列表很长并且该项目通常存在时。)
于 2008-10-07T01:40:49.213 回答
972

对学习 Python 真正有帮助的一件事是使用交互式帮助功能:

>>> help(["foo", "bar", "baz"])
Help on list object:

class list(object)
 ...

 |
 |  index(...)
 |      L.index(value, [start, [stop]]) -> integer -- return first index of value
 |

这通常会引导您找到您正在寻找的方法。

于 2008-10-07T13:19:56.933 回答
657

大多数答案解释了如何查找单个索引,但如果项目多次在列表中,他们的方法不会返回多个索引。使用enumerate()

for i, j in enumerate(['foo', 'bar', 'baz']):
    if j == 'bar':
        print(i)

index()函数只返回第一次出现,而enumerate()返回所有出现。

作为列表理解:

[i for i, j in enumerate(['foo', 'bar', 'baz']) if j == 'bar']

这也是另一个小解决方案itertools.count()(与枚举几乎相同):

from itertools import izip as zip, count # izip for maximum efficiency
[i for i, j in zip(count(), ['foo', 'bar', 'baz']) if j == 'bar']

对于较大的列表,这比使用更有效enumerate()

$ python -m timeit -s "from itertools import izip as zip, count" "[i for i, j in zip(count(), ['foo', 'bar', 'baz']*500) if j == 'bar']"
10000 loops, best of 3: 174 usec per loop
$ python -m timeit "[i for i, j in enumerate(['foo', 'bar', 'baz']*500) if j == 'bar']"
10000 loops, best of 3: 196 usec per loop
于 2013-06-19T22:31:52.557 回答
215

获取所有索引:

indexes = [i for i,x in enumerate(xs) if x == 'foo']
于 2013-06-25T15:07:55.127 回答
149

index()返回值的第一个索引!

| 索引(...)
| L.index(value, [start, [stop]]) -> integer -- 返回值的第一个索引

def all_indices(value, qlist):
    indices = []
    idx = -1
    while True:
        try:
            idx = qlist.index(value, idx+1)
            indices.append(idx)
        except ValueError:
            break
    return indices

all_indices("foo", ["foo","bar","baz","foo"])
于 2011-08-30T09:40:54.867 回答
98
a = ["foo","bar","baz",'bar','any','much']

indexes = [index for index in range(len(a)) if a[index] == 'bar']
于 2012-08-21T12:01:54.630 回答
98

如果该元素不在列表中,则会出现问题。这个函数处理这个问题:

# if element is found it returns index of element else returns None

def find_element_in_list(element, list_element):
    try:
        index_element = list_element.index(element)
        return index_element
    except ValueError:
        return None
于 2013-04-16T10:19:36.350 回答
66

您必须设置一个条件来检查您正在搜索的元素是否在列表中

if 'your_element' in mylist:
    print mylist.index('your_element')
else:
    print None
于 2014-05-26T04:26:52.337 回答
56

如果你想要所有索引,那么你可以使用NumPy

import numpy as np

array = [1, 2, 1, 3, 4, 5, 1]
item = 1
np_array = np.array(array)
item_index = np.where(np_array==item)
print item_index
# Out: (array([0, 2, 6], dtype=int64),)

这是清晰易读的解决方案。

于 2015-11-17T19:05:23.603 回答
51

这里提出的所有功能都重现了固有的语言行为,但掩盖了正在发生的事情。

[i for i in range(len(mylist)) if mylist[i]==myterm]  # get the indices

[each for each in mylist if each==myterm]             # get the items

mylist.index(myterm) if myterm in mylist else None    # get the first index and fail quietly

如果语言提供了执行您想要的方法的方法,为什么还要编写带有异常处理的函数?

于 2013-05-16T16:45:29.667 回答
47

在 Python 中查找给定包含它的列表的项目的索引

对于列表["foo", "bar", "baz"]中的列表和项目,"bar"在 Python 中获取其索引 (1) 的最简洁方法是什么?

好吧,当然,有 index 方法,它返回第一次出现的索引:

>>> l = ["foo", "bar", "baz"]
>>> l.index('bar')
1

这种方法有几个问题:

  • 如果该值不在列表中,您将得到一个ValueError
  • 如果列表中有多个值,则仅获取第一个值的索引

没有值

如果该值可能丢失,则需要捕获ValueError.

您可以使用这样的可重用定义来做到这一点:

def index(a_list, value):
    try:
        return a_list.index(value)
    except ValueError:
        return None

并像这样使用它:

>>> print(index(l, 'quux'))
None
>>> print(index(l, 'bar'))
1

这样做的缺点是您可能会检查返回值是否为isis not

result = index(a_list, value)
if result is not None:
    do_something(result)

列表中有多个值

如果您可以有更多的出现,您将无法获得完整的信息list.index

>>> l.append('bar')
>>> l
['foo', 'bar', 'baz', 'bar']
>>> l.index('bar')              # nothing at index 3?
1

您可以将索引枚举到列表中:

>>> [index for index, v in enumerate(l) if v == 'bar']
[1, 3]
>>> [index for index, v in enumerate(l) if v == 'boink']
[]

如果你没有出现,你可以用布尔检查结果来检查,或者如果你循环结果,什么都不做:

indexes = [index for index, v in enumerate(l) if v == 'boink']
for index in indexes:
    do_something(index)

使用 pandas 更好地处理数据

如果您有 pandas,您可以使用 Series 对象轻松获取此信息:

>>> import pandas as pd
>>> series = pd.Series(l)
>>> series
0    foo
1    bar
2    baz
3    bar
dtype: object

比较检查将返回一系列布尔值:

>>> series == 'bar'
0    False
1     True
2    False
3     True
dtype: bool

通过下标符号将该系列布尔值传递给该系列,您将获得匹配的成员:

>>> series[series == 'bar']
1    bar
3    bar
dtype: object

如果您只需要索引,则 index 属性会返回一系列整数:

>>> series[series == 'bar'].index
Int64Index([1, 3], dtype='int64')

如果您希望它们在列表或元组中,只需将它们传递给构造函数:

>>> list(series[series == 'bar'].index)
[1, 3]

是的,您也可以将列表推导与 enumerate 一起使用,但这并不那么优雅,在我看来 - 您正在 Python 中进行相等性测试,而不是让用 C 编写的内置代码处理它:

>>> [i for i, value in enumerate(l) if value == 'bar']
[1, 3]

这是XY 问题吗?

XY 问题是询问您尝试的解决方案,而不是您的实际问题。

为什么你认为你需要给定列表中的元素的索引?

如果您已经知道该值,为什么还要关心它在列表中的位置?

如果该值不存在,则捕获该ValueError值相当冗长-我更愿意避免这种情况。

无论如何,我通常会遍历列表,所以我通常会保留指向任何有趣信息的指针,并通过枚举获取索引。

如果您正在处理数据,您可能应该使用 pandas - 它拥有比我展示的纯 Python 解决方法更优雅的工具。

我不记得需要list.index,我自己。但是,我浏览了 Python 标准库,发现它有一些出色的用途。

它有很多很多用途idlelib,用于 GUI 和文本解析。

keyword模块使用它来查找模块中的注释标记,以通过元编程自动重新生成其中的关键字列表。

在 Lib/mailbox.py 中,它似乎像有序映射一样使用它:

key_list[key_list.index(old)] = new

del key_list[key_list.index(key)]

在lib/http/cookiejar.py中,好像是用来获取下个月的:

mon = MONTHS_LOWER.index(mon.lower())+1

在 Lib/tarfile.py 中,类似于 distutils 来获得一个项目的切片:

members = members[:members.index(tarinfo)]

在 Lib/pickletools.py 中:

numtopop = before.index(markobject)

这些用法的共同点似乎是它们似乎在限制大小的列表上运行(很重要,因为 O(n) 的查找时间很重要list.index),并且它们主要用于解析(以及空闲情况下的 UI)。

虽然有它的用例,但它们并不常见。如果您发现自己正在寻找这个答案,请问问自己,您所做的是否是该语言为您的用例提供的工具的最直接使用。

于 2017-08-22T03:08:59.677 回答
31

获取列表中一个或多个(相同)项目的所有出现和位置

使用 enumerate(alist) 您可以存储第一个元素 (n),它是当元素 x 等于您要查找的内容时列表的索引。

>>> alist = ['foo', 'spam', 'egg', 'foo']
>>> foo_indexes = [n for n,x in enumerate(alist) if x=='foo']
>>> foo_indexes
[0, 3]
>>>

让我们的函数 findindex

这个函数将项目和列表作为参数,并返回项目在列表中的位置,就像我们之前看到的那样。

def indexlist(item2find, list_or_string):
  "Returns all indexes of an item in a list or a string"
  return [n for n,item in enumerate(list_or_string) if item==item2find]

print(indexlist("1", "010101010"))

输出


[1, 3, 5, 7]

简单的

for n, i in enumerate([1, 2, 3, 4, 1]):
    if i == 1:
        print(n)

输出:

0
4
于 2017-08-08T05:01:01.687 回答
24

zip具有该功能的所有索引:

get_indexes = lambda x, xs: [i for (y, i) in zip(xs, range(len(xs))) if x == y]

print get_indexes(2, [1, 2, 3, 4, 5, 6, 3, 2, 3, 2])
print get_indexes('f', 'xsfhhttytffsafweef')
于 2015-11-11T05:16:38.490 回答
22

简单地你可以去

a = [['hand', 'head'], ['phone', 'wallet'], ['lost', 'stock']]
b = ['phone', 'lost']

res = [[x[0] for x in a].index(y) for y in b]
于 2013-05-29T07:17:15.180 回答
19

另外一个选项

>>> a = ['red', 'blue', 'green', 'red']
>>> b = 'red'
>>> offset = 0;
>>> indices = list()
>>> for i in range(a.count(b)):
...     indices.append(a.index(b,offset))
...     offset = indices[-1]+1
... 
>>> indices
[0, 3]
>>> 
于 2013-05-29T19:17:21.037 回答
17

而现在,为了完全不同的东西......

...就像在获取索引之前确认项目的存在。这种方法的好处是该函数总是返回一个索引列表——即使它是一个空列表。它也适用于字符串。

def indices(l, val):
    """Always returns a list containing the indices of val in the_list"""
    retval = []
    last = 0
    while val in l[last:]:
            i = l[last:].index(val)
            retval.append(last + i)
            last += i + 1   
    return retval

l = ['bar','foo','bar','baz','bar','bar']
q = 'bar'
print indices(l,q)
print indices(l,'bat')
print indices('abcdaababb','a')

粘贴到交互式 python 窗口中时:

Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def indices(the_list, val):
...     """Always returns a list containing the indices of val in the_list"""
...     retval = []
...     last = 0
...     while val in the_list[last:]:
...             i = the_list[last:].index(val)
...             retval.append(last + i)
...             last += i + 1   
...     return retval
... 
>>> l = ['bar','foo','bar','baz','bar','bar']
>>> q = 'bar'
>>> print indices(l,q)
[0, 2, 4, 5]
>>> print indices(l,'bat')
[]
>>> print indices('abcdaababb','a')
[0, 4, 5, 7]
>>> 

更新

经过一年的低调python开发,我对原来的答案有点尴尬,所以为了澄清事实,当然可以使用上面的代码;然而,获得相同行为的更惯用的方法是使用列表推导以及 enumerate() 函数。

像这样的东西:

def indices(l, val):
    """Always returns a list containing the indices of val in the_list"""
    return [index for index, value in enumerate(l) if value == val]

l = ['bar','foo','bar','baz','bar','bar']
q = 'bar'
print indices(l,q)
print indices(l,'bat')
print indices('abcdaababb','a')

其中,当粘贴到交互式 python 窗口中时会产生:

Python 2.7.14 |Anaconda, Inc.| (default, Dec  7 2017, 11:07:58) 
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def indices(l, val):
...     """Always returns a list containing the indices of val in the_list"""
...     return [index for index, value in enumerate(l) if value == val]
... 
>>> l = ['bar','foo','bar','baz','bar','bar']
>>> q = 'bar'
>>> print indices(l,q)
[0, 2, 4, 5]
>>> print indices(l,'bat')
[]
>>> print indices('abcdaababb','a')
[0, 4, 5, 7]
>>> 

现在,在查看了这个问题和所有答案之后,我意识到这正是FMc在他之前的回答中所建议的。在我最初回答这个问题的时候,我什至没有看到那个答案,因为我不明白。我希望我更详细的示例将有助于理解。

如果上面的单行代码对您来说仍然没有意义,我强烈建议您谷歌“python 列表理解”并花几分钟时间熟悉一下。它只是使使用 Python 开发代码成为一种乐趣的众多强大功能之一。

于 2014-12-30T21:03:10.157 回答
15

来自 FMc 和 user7177 的答案的变体将给出一个可以返回任何条目的所有索引的 dict:

>>> a = ['foo','bar','baz','bar','any', 'foo', 'much']
>>> l = dict(zip(set(a), map(lambda y: [i for i,z in enumerate(a) if z is y ], set(a))))
>>> l['foo']
[0, 5]
>>> l ['much']
[6]
>>> l
{'baz': [2], 'foo': [0, 5], 'bar': [1, 3], 'any': [4], 'much': [6]}
>>> 

您也可以将其用作一个衬里来获取单个条目的所有索引。尽管我确实使用 set(a) 来减少调用 lambda 的次数,但不能保证效率。

于 2014-03-28T09:11:57.203 回答
12

查找列表 L 中项目 x 的索引:

idx = L.index(x) if (x in L) else -1
于 2018-05-25T21:56:07.317 回答
10

此解决方案不如其他解决方案强大,但如果您是初学者并且只了解for循环,则仍然可以在避免 ValueError 的同时找到项目的第一个索引:

def find_element(p,t):
    i = 0
    for e in p:
        if e == t:
            return i
        else:
            i +=1
    return -1
于 2015-05-17T03:21:00.660 回答
8

有可能该值可能不存在,因此为了避免此 ValueError,我们可以检查该值是否确实存在于 list 中。

list =  ["foo", "bar", "baz"]

item_to_find = "foo"

if item_to_find in list:
      index = list.index(item_to_find)
      print("Index of the item is " + str(index))
else:
    print("That word does not exist") 
于 2020-08-28T09:35:53.347 回答
7

我的朋友,我已经制作了最简单的代码来解决你的问题。当您收到大量代码时,我在这里为您提供两行代码,这都是由于index()python 中的函数的帮助。

LIST = ['foo' ,'boo', 'shoo']
print(LIST.index('boo'))

输出:

1

我希望我给了你最好和最简单的答案,这可能会对你有很大帮助。

于 2022-01-13T19:49:59.767 回答
6
name ="bar"
list = [["foo", 1], ["bar", 2], ["baz", 3]]
new_list=[]
for item in list:
    new_list.append(item[0])
print(new_list)
try:
    location= new_list.index(name)
except:
    location=-1
print (location)

这说明了字符串是否也在列表中,如果它不在列表中,则location = -1

于 2015-07-05T13:12:19.287 回答
6

如果未找到该项目, Pythonindex()方法将引发错误。因此,您可以使其类似于indexOf()JavaScript 的函数,-1如果未找到该项目则返回:

try:
    index = array.index('search_keyword')
except ValueError:
    index = -1
于 2018-03-04T08:39:34.357 回答
6

对于一个可比的

# Throws ValueError if nothing is found
some_list = ['foo', 'bar', 'baz'].index('baz')
# some_list == 2

自定义谓词

some_list = [item1, item2, item3]

# Throws StopIteration if nothing is found
# *unless* you provide a second parameter to `next`
index_of_value_you_like = next(
    i for i, item in enumerate(some_list)
    if item.matches_your_criteria())

按谓词查找所有项目的索引

index_of_staff_members = [
    i for i, user in enumerate(users)
    if user.is_staff()]
于 2020-06-22T16:02:01.873 回答
6

它只使用 python 函数array.index()和一个简单的 Try / except,如果在列表中找到它则返回记录的位置,如果在列表中找不到则返回 -1(就像在 JavaScript 上使用 function 一样indexOf())。

fruits = ['apple', 'banana', 'cherry']

try:
  pos = fruits.index("mango")
except:
  pos = -1

在这种情况下,列表中不存在“芒果”,fruits因此pos变量为 -1,如果我搜索“樱桃”,则pos变量将为 2。

于 2021-04-10T07:48:03.217 回答
5

对此有一个更实用的答案。

list(filter(lambda x: x[1]=="bar",enumerate(["foo", "bar", "baz", "bar", "baz", "bar", "a", "b", "c"])))

更通用的形式:

def get_index_of(lst, element):
    return list(map(lambda x: x[0],\
       (list(filter(lambda x: x[1]==element, enumerate(lst))))))
于 2018-03-07T19:09:44.717 回答
4

由于 Python 列表是从零开始的,我们可以使用 zip 内置函数,如下所示:

>>> [i for i,j in zip(range(len(haystack)), haystack) if j == 'needle' ]

其中“haystack”是有问题的列表,“needle”是要查找的项目。

(注意:这里我们使用 i 进行迭代以获取索引,但如果我们需要专注于项目,我们可以切换到 j。)

于 2017-08-12T20:01:08.917 回答
3

如果您要查找一次索引,那么使用“索引”方法就可以了。但是,如果您要多次搜索数据,那么我建议使用bisect模块。请记住,必须对使用 bisect 模块的数据进行排序。因此,您对数据进行一次排序,然后您可以使用 bisect。在我的机器上使用bisect模块比使用索引方法快大约 20 倍。

以下是使用 Python 3.8 及以上语法的代码示例:

import bisect
from timeit import timeit

def bisect_search(container, value):
    return (
      index 
      if (index := bisect.bisect_left(container, value)) < len(container) 
      and container[index] == value else -1
    )

data = list(range(1000))
# value to search
value = 666

# times to test
ttt = 1000

t1 = timeit(lambda: data.index(value), number=ttt)
t2 = timeit(lambda: bisect_search(data, value), number=ttt)

print(f"{t1=:.4f}, {t2=:.4f}, diffs {t1/t2=:.2f}")

输出:

t1=0.0400, t2=0.0020, diffs t1/t2=19.60
于 2020-04-03T16:50:22.850 回答
3

我发现这两种解决方案更好,我自己尝试过

>>> expences = [2200, 2350, 2600, 2130, 2190]
>>> 2000 in expences
False
>>> expences.index(2200)
0
>>> expences.index(2350)
1
>>> index = expences.index(2350)
>>> expences[index]
2350

>>> try:
...     print(expences.index(2100))
... except ValueError as e:
...     print(e)
... 
2100 is not in list
>>> 


于 2021-10-03T14:09:11.853 回答
2

对于像我这样来自其他语言的人来说,也许通过一个简单的循环更容易理解和使用它:

mylist = ["foo", "bar", "baz", "bar"]
newlist = enumerate(mylist)
for index, item in newlist:
  if item == "bar":
    print(index, item)

我很感激那么枚举到底是做什么的呢?. 这有助于我理解。

于 2018-01-30T21:10:12.370 回答
2

如果关注性能:

在许多答案中都提到方法的内置list.index(item)方法是O(n)算法。如果您需要执行一次,这很好。但是,如果您需要多次访问元素的索引,那么首先创建一个包含项目索引对的字典 (O(n)),然后在每次需要时访问 O(1) 时的索引会更有意义它。

如果您确定列表中的项目不会重复,您可以轻松:

myList = ["foo", "bar", "baz"]

# Create the dictionary
myDict = dict((e,i) for i,e in enumerate(myList))

# Lookup
myDict["bar"] # Returns 1
# myDict.get("blah") if you don't want an error to be raised if element not found.

如果您可能有重复的元素,并且需要返回它们的所有索引:

from collections import defaultdict as dd
myList = ["foo", "bar", "bar", "baz", "foo"]

# Create the dictionary
myDict = dd(list)
for i,e in enumerate(myList):
    myDict[e].append(i)

# Lookup
myDict["foo"] # Returns [0, 4]
于 2018-09-10T18:51:04.540 回答
2

让我们为lst您拥有的列表命名。可以将列表转换lstnumpy array. 然后,使用numpy.where获取列表中所选项目的索引。以下是您实施它的方式。

import numpy as np

lst = ["foo", "bar", "baz"]  #lst: : 'list' data type
print np.where( np.array(lst) == 'bar')[0][0]

>>> 1
于 2018-11-14T18:49:26.307 回答
2

python 中的某些结构包含一个索引方法,可以很好地解决这个问题。

'oi tchau'.index('oi')     # 0
['oi','tchau'].index('oi') # 0
('oi','tchau').index('oi') # 0

参考:

在列表中

在元组中

在字符串中

于 2021-12-29T18:49:45.980 回答
2
text = ["foo", "bar", "baz"]
target = "bar"

[index for index, value in enumerate(text) if value == target]

对于一小部分元素,这可以正常工作。但是,如果列表包含大量元素,最好使用 O(log n) 运行时复杂度的二进制搜索

于 2022-01-07T00:08:04.047 回答
2

列表理解将是在查找列表中项目的索引时获得紧凑实现的最佳选择。

a_list = ["a", "b", "a"]
print([index for (index , item) in enumerate(a_list) if item == "a"])
于 2022-02-07T10:46:48.563 回答
1

正如@TerryA 所指出的,许多答案都讨论了如何找到一个索引。

more_itertools是一个第三方库,带有用于在一个可迭代对象中定位多个索引的工具。

给定

import more_itertools as mit


iterable = ["foo", "bar", "baz", "ham", "foo", "bar", "baz"]

代码

查找多个观测值的索引:

list(mit.locate(iterable, lambda x: x == "bar"))
# [1, 5]

测试多个项目:

list(mit.locate(iterable, lambda x: x in {"bar", "ham"}))
# [1, 3, 5]

另请参阅更多选项more_itertools.locate。通过安装> pip install more_itertools

于 2018-09-25T15:47:56.120 回答
1

使用字典,首先处理列表,然后将索引添加到它

from collections import defaultdict

index_dict = defaultdict(list)    
word_list =  ['foo','bar','baz','bar','any', 'foo', 'much']

for word_index in range(len(word_list)) :
    index_dict[word_list[word_index]].append(word_index)

word_index_to_find = 'foo'       
print(index_dict[word_index_to_find])

# output :  [0, 5]
于 2019-03-18T09:32:09.893 回答
1

Pythonic 方式可以使用enumerate,但您也可以indexOfoperator模块中使用。请注意,ValueError如果b不在a.

>>> from operator import indexOf
>>>
>>>
>>> help(indexOf)
Help on built-in function indexOf in module _operator:

indexOf(a, b, /)
    Return the first index of b in a.

>>>
>>>
>>> indexOf(("foo", "bar", "baz"), "bar") # with tuple
1
>>> indexOf(["foo", "bar", "baz"], "bar") # with list
1
于 2021-11-28T12:37:15.867 回答
-1

简单的选项:

a = ["foo", "bar", "baz"]
[i for i in range(len(a)) if a[i].find("bar") != -1]
于 2021-05-04T12:28:48.487 回答