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

我正在遍历一个列表,如果它满足一定的条件,我想打印出该项目的索引。 我将如何做到这一点?

例:

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

嗯。 在这里有一个列表理解的答案,但它消失了。

这里:

  [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] 

更新:

好的,你需要一个生成器expression式,我们将有一个生成器expression式。 下面是在for循环中的列表理解:

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

现在我们将构build一个发电机…

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

我们可以把它分配给一个variables,并从那里使用它…

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

并认为我曾经写FORTRAN。

那么下面呢?

 print testlist.index(element) 

如果您不确定要查找的元素是否确实在列表中,则可以添加一个初步检查

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

要么

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

或者“pythonic的方式”,我不太喜欢这么多,因为代码不太清晰,但有时效率更高,

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

使用枚举:

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

xrange而不是范围的要求(见评论)。

这是另一种方法来做到这一点:

 try: id = testlist.index('1') print testlist[id] except: print "Not Found" 
 [x for x in range(len(testlist)) if testlist[x]==1] 

如果您的列表变得足够大,而您只希望在稀疏索引中find值,则认为此代码可以执行得更快,因为您不必迭代列表中的每个值。

 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 

如果您希望大量查找该值,则可能只需将“索引”附加到列表中,并在最后打印列表以节省每次迭代的时间。

我认为使用Tkinter库中的curselection()方法可能是有用的:

 from Tkinter import * listbox.curselection() 

此方法在Tkinter列表框小部件上工作,所以你需要构build其中的一个,而不是一个列表。

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

('0') (尽pipe后面的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] for id, value in enumerate(testlist): if id == 1: print testlist[id] 

我想这是你想要的。 ;-)'id'将始终是列表中值的索引。