代码之家  ›  专栏  ›  技术社区  ›  user8962187

从python上的列表中获取索引[重复]

  •  1
  • user8962187  · 技术社区  · 8 年前

    我需要从列表中最小的元素中获取所有索引:

    A = [5,2,1,5,6,1,7,9,2]
    
    
    minimo = min(A)
    #print minimo
    indexArray = []
    for elem in A:
        #print elem
        if elem == minimo:
            indexArray.append(A.index(elem))
    print indexArray
    

    需要此输出:[2,5]

    3 回复  |  直到 8 年前
        1
  •  2
  •   Joe Iddon    8 年前

    你可以使用 list-comprehension 具有 enumerate() . 感谢 @MikeScotty ,性能改进将是首先计算最小值。

    代码如下:

    mn = min(A)
    [i for i,e in enumerate(A) if e == mn]
    

    其中给出:

    [2, 5]
    

    哪些是 1s 在里面 A -不是 [2, 8]


    minx wrapper :

    >>> def minx(l):
    ...     print("called")
    ...     return min(l)
    ... 
    >>> [i for i,e in enumerate(A) if e == minx(A)]
    called
    called
    called
    called
    called
    called
    called
    called
    called
    [2, 5]
    

    和一些计时使用 timeit :

    >>> timeit.timeit("[i for i,e in enumerate(A) if e == min(A)]", globals=locals())
    5.9568054789997404
    >>> timeit.timeit("[i for i,e in enumerate(A) if e == 1]", globals=locals())
    1.397674421001284
    
        2
  •  0
  •   Vasilis G.    8 年前

    你也可以试试这个:

    A = [5,2,1,5,6,1,7,9,2]
    minimum = min(A)
    res = list(filter(lambda m: A[m]==minimum, range(len(A))))
    print(res)
    

    [2, 5]
    
        3
  •  0
  •   Hejun    8 年前

    因为当你使用

    A.index(elem)
    

    A=[5,2,1,5,6,1,7,9,2]
    minimo = min(A)
    indexArray = []
    for index,value in enumerate(A):
        if value == minimo:
            indexArray.append(index)
    print(indexArray)