如何获取列表中项目的位置?
- 2025-03-18 08:54:00
- admin 原创
- 56
问题描述:
我正在遍历一个列表,并且想要打印出满足特定条件的项目的索引。我该怎么做?
例子:
testlist = [1,2,3,5,3,1,2,1,6]
for item in testlist:
if item == 1:
print position
解决方案 1:
嗯。这里原本有一个带有列表推导的答案,但它消失了。
这里:
[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。
解决方案 2:
那么下面呢?
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
解决方案 3:
使用枚举:
testlist = [1,2,3,5,3,1,2,1,6]
for position, item in enumerate(testlist):
if item == 1:
print position
解决方案 4:
for i in xrange(len(testlist)):
if testlist[i] == 1:
print i
按照要求使用 xrange 而不是 range (参见注释)。
解决方案 5:
下面是另一种方法:
try:
id = testlist.index('1')
print testlist[id]
except ValueError:
print "Not Found"
解决方案 6:
请尝试以下操作:
testlist = [1,2,3,5,3,1,2,1,6]
position=0
for i in testlist:
if i == 1:
print(position)
position=position+1
解决方案 7:
[x for x in range(len(testlist)) if testlist[x]==1]
解决方案 8:
如果您的列表足够大,并且您只希望在稀疏数量的索引中找到值,请考虑此代码可以执行得更快,因为您不必迭代列表中的每个值。
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
如果您希望找到很多值,您可能应该只将“索引”附加到列表并在末尾打印列表以节省每次迭代的时间。
解决方案 9:
我认为使用 Tkinter 库中的 curselection() 方法可能会很有用:
from Tkinter import *
listbox.curselection()
此方法适用于 Tkinter 列表框小部件,因此您需要构建其中一个而不是列表。
这将返回如下位置:
('0',)(尽管 Tkinter 的后续版本可能会返回整数列表)
这是第一个位置,并且数字将根据项目位置而变化。
有关更多信息,请参阅此页面:
http://effbot.org/tkinterbook/listbox.htm
问候。
解决方案 10:
为什么要让事情复杂化?
testlist = [1,2,3,5,3,1,2,1,6]
for position, item in enumerate(testlist):
if item == 1:
print position
解决方案 11:
l = list(map(int,input().split(",")))
num = int(input())
for i in range(len(l)):
if l[i] == num:
print(i)
解释:
在第 1 行中获取一个整数“l”(以逗号分隔)的列表。在第 2 行中获取一个整数“num”。在第 3 行中使用 for 循环遍历列表内部并检查列表内的数字是否满足给定的数字(num),然后它将打印列表内数字的索引。
解决方案 12:
仅说明完整的示例以及input_list
其中具有searies1
(示例:input_list [0])的示例,其中您想要查找series2
(示例:input_list [1])并获取 series2 的索引(如果它存在于 series1 中)。
注意: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]
解决方案 13:
testlist = [1,2,3,5,3,1,2,1,6]
num = 1
for item in range(len(testlist)):
if testlist[item] == num:
print(item)
解决方案 14:
那尝试一下
list_ = ["pen", "david"]
for i in list_:
list_.index(i)
代码逐字逐句地获取每个对象并解析i
此外,如果您想检查特定元素,您可以尝试:
list_ = ["pen", "david"]
for i in list_:
if list_.index(i) == 0:
print(i, list_.index(i))
解决方案 15:
testlist = [1,2,3,5,3,1,2,1,6]
for id, value in enumerate(testlist):
if id == 1:
print testlist[id]
我猜这正是你想要的。;-)“id”将始终是列表上值的索引。
扫码咨询,免费领取项目管理大礼包!