假设我写了一个列表:
foo=[1,2,3,4,5,6,7,8,9,1]
当我试图在1
中找出foo
的索引时,它会变为0.但我想在最后找到1
的索引(它是期望索引是9)所以我写了这个简单的代码,它会给我列表中所有项目的所有索引:
for i in foo:
print(foo.index(i))
结果是:
0
1
2
3
4
5
6
7
8
0
请注意,根据上面的迭代,foo中的最后一个1
的索引也为零。
现在我尝试使用以下命令删除索引为9的列表项:
即使迭代证明它的索引为0,del foo[9]
和最后1
也会被删除!
为什么会这样?
答案 0 :(得分:4)
当您使用 index()
方法时,它会返回搜索项的第一个实例。 
看看这个
>>> a = [5,4,1,3,1,2]
>>> a.index(1)
 2



 无论你做什么和迭代多少次,这都不会改变。 
您可以使用


 作为索引,枚举中的行(foo):
打印(指数)
 代码>


答案 1 :(得分:3)
获取所有指数:
>>> [i for i, num in enumerate(foo) if num == 1]
[0, 9]
获取最大索引:
>>> max([i for i, num in enumerate(foo) if num == 1])
9
答案 2 :(得分:2)
在Python中,如果找到某个项目,则迭代将退出,并且不会检查其他项目。
因此,如果您使用索引元素调用索引函数,则必须找到该函数。索引函数只会检索它找到的与您的参数匹配的第一个元素索引(在本例中为i)
如果您需要所有可能的索引,则需要使用list comphrehension
foo=[1,2,3,4,5,6,7,8,9,1]
bar = [i for i,x in enumerate(foo) if i == 1]
print(bar)
答案 3 :(得分:1)
让我们看一下index
函数的文档:
list.index(x[, start[, end]])
在值为
x
的第一个项目的列表中返回从零开始的索引。如果没有这样的项目,则引发ValueError
。
因此它返回带有该值的第一个项。这就解释了为什么index(1)
总是出现0。
当您使用del foo[9]
时,您告诉它擦除列表中第9位的对象。虽然它与元素0具有相同的值,但它不是同一个对象。我们可以通过
>>>foo[0] is foo[9]
False
这是预期的行为。仅仅因为两个对象具有相同的值并不意味着它们是同一个对象。
答案 4 :(得分:1)
index()
从列表的开头搜索,并返回一次查找。所以 1
的索引是0.一个解决方案是枚举你自己。
def index_all(lst,x):&#xA ; return [i for i,v in enumerate(lst)if v == x]

 print(index_all([1,2,3,4,5,6,7,8,9,1] ],1))



答案 5 :(得分:1)
问题是,你将i作为参数传递给函数索引 并且文档说index(x)“返回最小的i,使得i是第一次出现的x的索引”。 因此,每次你通过1,它将始终给出第一次出现 但请检查
foo=[1,2,3,4,5,6,7,8,9,10]
>>> for i in foo:
... print(foo.index(i))
...
0
1
2
3
4
5
6
7
8
9
这会产生不同的结果,因为所有元素都是不同的
答案 6 :(得分:0)
您可以尝试这种方式:
foo=[1,2,3,4,5,6,7,8,9,1]
for i, val in enumerate(foo):
if val == 1:
print(i)
'''
output :
0
9
'''
答案 7 :(得分:-1)
如果您不明白,请参阅以下资料来解释。
1. help(list) 2. def index(self, value, start=None, stop=None): """ L.index(value, [start, [stop]]) -> integer -- return first index of value. Raises ValueError if the value is not present. """ return 0