【问题标题】:Finding indexes of even numbers in a list在列表中查找偶数的索引
【发布时间】:2018-07-21 03:42:58
【问题描述】:

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

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) 我在这里有点困惑。有什么帮助吗?

【问题讨论】:

    标签: python list indexing


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      对于 python 2.x:

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

      对于 python 3.x:

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

      【讨论】:

        【解决方案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]
        

        【讨论】:

          【解决方案4】:

          您可以使用list-comprehensionenumerate 来获得偶数元素的indexes

          >>> [i for i, e in enumerate(messy) if not e & 1]
          [1, 2]
          

          这里的& 1 屏蔽了列表中每个数字的最后一位,表示它是奇数 (1) 还是偶数 (0),然后我们可以使用 Python 的 not翻转它并获得所需的结果

          【讨论】:

            【解决方案5】:

            如果你使用numpy,你可以使用np.where

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

            【讨论】:

              猜你喜欢
              • 2023-03-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-05-07
              • 2023-01-12
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多