我想在此列表中找到偶数的索引。
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)
的原因
我在这里有点困惑。有什么帮助吗?
答案 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]),)