查找列表中偶数的索引

时间:2018-02-10 14:04:19

标签: python list indexing

我想在此列表中找到偶数的索引。

messy = [5, 2, 8, 1, 3]
y = [x for x in messy if x%2==0]
f = y[0]
g = y[1]
print(f, g)
>>> 2 8
z = messy.index(f)
zz = messy.index(g)
print(z)
>>> 1

print(y)输出[2,8],这不在列表中,这就是我不能messy.index(y)的原因 我在这里有点困惑。有什么帮助吗?

5 个答案:

答案 0 :(得分:4)

当列表中有2个或更多相同的值元素时,.index方法将失败。相反,您可以通过枚举列表并使用以下索引来简化

even_indices = [i for i, elem in enumerate(messy)
                  if elem % 2 == 0]

答案 1 :(得分:3)

另一种方法是使用lambda

>>> messy = [5, 2, 8, 1, 3]
>>> filter(lambda i: i%2==0, messy)
[2, 8]

以上将为您提供偶数。现在,如果您想获取这些偶数的索引,可以采用以下两种方法:

使用类似的列表解析:

>>> [k[0] for k in filter(lambda (i,j): j%2==0, enumerate(messy))]
[1, 2]

或使用map结合filter

>>> from operator import itemgetter
>>> map(itemgetter(0), filter(lambda (i,j): j%2==0, enumerate(messy)))
[1, 2]

答案 2 :(得分:3)

您可以使用filter函数和lambda表达式使用函数式方法:

对于python 2.x:

filter(lambda a:a%2==0, messy)

对于python 3.x:

list(filter(lambda a:a%2==0, messy))

答案 3 :(得分:2)

您可以使用use List::UtilsBy 'sort_by'; my @sorted_keys = sort_by { $hash{$_} } keys %hash; list-comprehension来获取偶数元素的enumerate

indexes

>>> [i for i, e in enumerate(messy) if not e & 1] [1, 2] 这里屏蔽了列表中每个数字的最后一位,表示它是奇数(& 1)还是偶数(1),我们可以只需使用Python的0来翻转它并获得所需的结果

答案 4 :(得分:1)

如果您使用numpy,则可以使用np.where

>>> import numpy as np
>>> messy = np.array([5, 2, 8, 1, 3])
>>> np.where(messy % 2 == 0)
(array([1, 2]),)