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

我正在对一个列表进行迭代,如果满足某个条件,我希望打印出该项的索引。我要怎么做?

例如:

testlist = [1,2,3,5,3,1,2,1,6]
for item in testlist:
if item == 1:
print position
607179 次浏览
for i in xrange(len(testlist)):
if testlist[i] == 1:
print i

Xrange 而不是所请求的 range (参见注释)。

使用枚举:

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

如果您的列表足够大,并且您只希望在数量稀少的索引中找到该值,请考虑这段代码 可以的执行速度要快得多,因为您不必迭代列表中的每个值。

lookingFor = 1
i = 0
index = 0
try:
while i < len(testlist):
index = testlist.index(lookingFor,i)
i = index + 1
print index
except ValueError: #testlist.index() cannot find lookingFor
pass

如果你希望找到大量的值,你可能应该只是附加“索引”到一个列表,并在最后打印列表,以节省每次迭代的时间。

这里有个列表内涵的答案但是不见了。

这里:

 [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 循环中的列表内涵:

>>> 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。

testlist = [1,2,3,5,3,1,2,1,6]
for id, value in enumerate(testlist):
if id == 1:
print testlist[id]

我想这正是你想要的 ‘ id’将始终是列表中值的索引。

下面是另一种方法:

try:
id = testlist.index('1')
print testlist[id]
except ValueError:
print "Not Found"

那下面这些呢?

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
[x for x in range(len(testlist)) if testlist[x]==1]

我认为使用来自 Tkinter 库的 curselect ()方法可能会很有用:

from Tkinter import *
listbox.curselection()

此方法适用于 Tkinter listbox 小部件,因此需要构造其中之一而不是列表。

这将返回一个这样的位置:

(’0’,) (尽管 Tkinter 的后续版本可能会返回 int 列表)

这是第一个位置和数字将改变根据项目的立场。

有关更多信息,请参见此页: Http://effbot.org/tkinterbook/listbox.htm

你好。

为什么要把事情复杂化?

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

试试以下方法:

testlist = [1,2,3,5,3,1,2,1,6]
position=0
for i in testlist:
if i == 1:
print(position)
position=position+1

为了说明完整的例子以及 input_list,它有 searies1(例如: input _ list [0]) ,在这个例子中,您希望查找 series2(例如: input _ list [1]) ,并获取序列2的索引(如果它存在于序列1中的话)。

注意: 如果条件简单,那么 certain condition将使用 lambda 表达式

input_list = [[1,2,3,4,5,6,7],[1,3,7]]
series1 = input_list[0]
series2 = input_list[1]
idx_list = list(map(lambda item: series1.index(item) if item in series1 else None, series2))
print(idx_list)

产出:

[0, 2, 6]