如何获得项目在列表中的位置?
我正在遍历一个列表,如果它满足一定的条件,我想打印出该项目的索引。 我将如何做到这一点?
例:
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'将始终是列表中值的索引。