首页 > 解决方案 > 列表的 N 个最小元素的索引

问题描述

我试图从一个列表中找到 3 个最低的数字,并使用这些索引从另一个列表中找到相应的值。这是我尝试过的一个例子

a = [12, 83, 22, 30, 57, 32, 88, 46, 20, 26, 78, 65, 45, 56, 74]

b = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o']

lowest = lowest2 = lowest3 =  max(a)

indexes = []

for i in range(0,len(a)):
    if a[i] < lowest :  
            lowest = a[i] 
            print(b[i])

    elif a[i] < lowest2 and a[i] > lowest:  
            lowest2 = a[i]
            print(b[i])

    elif a[i] < lowest3 and a[i] > lowest2:  
            lowest3 = a[i]
            print(b[i])

    print(lowest,lowest2,lowest3)

我只能使用 anaconda 库,不,这不是分配,这是我一直在尝试做的程序的一小部分。

输出: a b c d i j 12 20 26

标签: pythonpython-3.xlist

解决方案


您可以做的是对列表进行排序a并返回它的索引值,

>>> a = [12, 83, 22, 30, 57, 32, 88, 46, 20, 26, 78, 65, 45, 56, 74]
>>> n_min_values = 3 
>>> sorted(range(len(a)), key=lambda k: a[k])[:n_min_values] 
[0, 8, 2] # index values

并遍历此索引值列表以从列表中获取相应的值b

>>> b = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o']
>>> for i in sorted(range(len(a)), key=lambda k: a[k])[:n_min_values ]:
        print(b[i])
a
i
c

或者

使用列表理解,

>>> [b[i] for i in sorted(range(len(a)), key=lambda k: a[k])[:n_min_values ]]
['a', 'i', 'c'] # your output

推荐阅读