![](/img/trans.png)
[英]huge matrix sorted and then find smallest elements with their indices into a list
[英]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.