我在列表上进行迭代,如果符合某个条件,我想打印出项目的索引。我该怎么做?
示例:
testlist = [1,2,3,5,3,1,2,1,6]
for item in testlist:
if item == 1:
print position
答案 0 :(得分:260)
嗯。这里有一个列表理解答案,但它已经消失了。
下面:
[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。
答案 1 :(得分:148)
以下情况如何?
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
答案 2 :(得分:40)
使用枚举:
testlist = [1,2,3,5,3,1,2,1,6]
for position, item in enumerate(testlist):
if item == 1:
print position
答案 3 :(得分:10)
for i in xrange(len(testlist)):
if testlist[i] == 1:
print i
xrange而不是请求的范围(请参阅注释)。
答案 4 :(得分:4)
这是另一种方法:
try:
id = testlist.index('1')
print testlist[id]
except ValueError:
print "Not Found"
答案 5 :(得分:3)
[x for x in range(len(testlist)) if testlist[x]==1]
答案 6 :(得分:1)
如果你的列表足够大并且你只希望在稀疏数量的索引中找到值,那么考虑到这个代码可以执行得更快,因为你不必迭代每个值清单。
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
如果您希望找到很多值,您可能只需将“index”附加到列表中并在末尾打印列表以节省每次迭代的时间。
答案 7 :(得分:1)
请尝试以下操作:
testlist = [1,2,3,5,3,1,2,1,6]
position=0
for i in testlist:
if i == 1:
print(position)
position=position+1
答案 8 :(得分:0)
我认为使用来自Tkinter库的curselection()方法可能很有用:
from Tkinter import *
listbox.curselection()
此方法适用于Tkinter列表框小部件,因此您需要构建其中一个而不是列表。
这将返回如下位置:
('0',)(虽然更高版本的Tkinter可能会返回一个int列表)
这是第一个位置,数字会根据项目位置而改变。
有关详细信息,请参阅此页面: http://effbot.org/tkinterbook/listbox.htm
问候。
答案 9 :(得分:0)
为什么复杂化?
testlist = [1,2,3,5,3,1,2,1,6]
for position, item in enumerate(testlist):
if item == 1:
print position
答案 10 :(得分:0)
仅是为了说明完整的示例以及带有input_list
的{{1}}(示例:input_list [0]),您要在其中查找searies1
(示例:input_list [ 1])并获得series2中的索引(如果存在于series1中。)
注意:如果条件简单,您的series2
将使用lambda表达式
certain condition
输出:
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)
答案 11 :(得分:-2)
testlist = [1,2,3,5,3,1,2,1,6]
for id, value in enumerate(testlist):
if id == 1:
print testlist[id]
我猜这正是你想要的。 ;-) 'id'将始终是列表中值的索引。