如何获取列表中项目的位置?

187 投票
15 回答
634630 浏览
提问于 2025-04-11 21:10

我正在遍历一个列表,想要在某个条件满足时打印出这个项目的索引。我该怎么做呢?

举个例子:

testlist = [1,2,3,5,3,1,2,1,6]
for item in testlist:
    if item == 1:
        print position

15 个回答

198

那下面这个怎么样呢?

print testlist.index(element)

如果你不确定要查找的元素是否真的在列表里,你可以先做一个初步检查,比如说

if element in testlist:
    print testlist.index(element)

或者

print(testlist.index(element) if element in testlist else None)

还有一种“更符合Python风格”的方法,我个人不太喜欢,因为这样写的代码不太清晰,但有时候效率更高,

try:
    print testlist.index(element)
except ValueError:
    pass
302

嗯,有个答案里有个列表推导式,但现在不见了。

在这里:

 [i for i,x in enumerate(testlist) if x == 1]

举个例子:

>>> testlist
[1, 2, 3, 5, 3, 1, 2, 1, 6]
>>> [i for i,x in enumerate(testlist) if x == 1]
[0, 5, 7]

更新:

好吧,你想要一个生成器表达式,那我们就来一个生成器表达式。这里是之前的列表推导式,用在一个循环里:

>>> for i in [i for i,x in enumerate(testlist) if x == 1]:
...     print i
... 
0
5
7

现在我们来构建一个生成器……

>>> (i for i,x in enumerate(testlist) if x == 1)
<generator object at 0x6b508>
>>> for i in (i for i,x in enumerate(testlist) if x == 1):
...     print i
... 
0
5
7

而且很巧妙的是,我们可以把它赋值给一个变量,然后从那里使用……

>>> gen = (i for i,x in enumerate(testlist) if x == 1)
>>> for i in gen: print i
... 
0
5
7

想想我以前写FORTRAN的时候。

撰写回答