簡體   English   中英

列表的 N 個最小元素的索引

[英]Indices of the N smallest elements of a list

我試圖從一個列表中找到 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 庫,不,這不是分配,這是我一直在嘗試做的程序的一小部分。

output:ab c dij 12 20 26

您可以做的是對列表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

堆擅長做這種事情,尤其是在最小項目的順序不重要的情況下。

這是一個在a上使用heapq.nsmallest及其壓縮索引的小示例。

from heapq import nsmallest
from operator import itemgetter

n = 3
idx, _ = zip(*nsmallest(n, enumerate(a), key=itemgetter(1)))
idx
# (0, 8, 2)

[b[i] for i in idx]  # your result
# ['a', 'i', 'c']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM