Python中如何獲得陣列或者列表按大小排序的索引

2021-09-19 04:40:29 字數 1924 閱讀 1815

(1)自定義方法

mylist = [1, 2, 3, 100, 5]

index_list=[i[0] for i in sorted(enumerate(mylist), key=lambda x:x[1])]

enumerate(mylist)返回乙個包含(index,value)元組的列表

[(0, 1), (1, 2), (2, 3), (3, 100), (4, 5)]
通過將列表傳遞給排序並指定乙個函式來抽取排序鍵(每個元組的第二個元素;這是lambda的用途),最後,每個排序的元素的原始索引使用[i [0 ] for i in …]列表解析。 

來自:(2)np.argsort函式

import numpy as np

a = np.array([1,4,3,5,2])

b = np.argsort(a)

print(b)

print結果為[0 4 2 1 3] ,即為從小到大排序的索引

來自:(3)利用heapq模組

# -*- coding: utf-8 -*-

import heapq

nums = [1, 8, 2, 23, 7, -4, 18, 23, 24, 37, 2]

# 最大的3個數的索引

max_num_index_list = map(nums.index, heapq.nlargest(3, nums))

# 最小的3個數的索引

min_num_index_list = map(nums.index, heapq.nsmallest(3, nums))

print(list(max_num_index_list))

print(list(min_num_index_list))

來自:

這裡利用了陣列自身屬性 index,

list.index(target), 其中list是目標list,target是需要的下標對應的值,返回對應的索引值

map函式的返回值是乙個 iterators,所以列印這裡加乙個list強制輸出所有

推薦前兩種方法, 第三種不推薦,第三種遇到相同大小的時候會都返回第乙個位置的索引

例如求如下列表中最大的三個數字的索引

# -*- coding: utf-8 -*-

__author__ = 'fff_zrx'

import heapq

import numpy as np

test_list= [1,2,3,3,4]

index_list=[i[0] for i in sorted(enumerate(test_list), key=lambda x:x[1])]

b = np.argsort(np.array(test_list))

max_num_index_list = map(test_list.index, heapq.nlargest(3, test_list))

print("第一種:",index_list[-3:][::-1])

print("第二種:",b[-3:][::-1])

print("第三種:",list(max_num_index_list))

輸出為:

第一種: [4, 3, 2]

第二種: [4 3 2]

第三種: [4, 2, 2] 

ps:a[::-1]相當於 a[-1:-len(a)-1:-1],即倒序輸出,前兩者預設都是從小到大排序的索引,所以需要倒序輸出一下

Oracle中獲得資料更新件數

在oracle的sql plus中,當update或者delete或者select這些dml操作以後,會顯示更新 刪除 檢索了多少行,在jdbc操作中,也會有返回值內容是影響了多少行。但是在我們的pl sql中如何取得這個資料呢。在pl sql中,當你進行檢索的時候,你可以自己開啟乙個游標curso...

C語言獲得陣列長度的函式

1 c語言中,定義陣列後可以用sizeof命令獲得陣列的長度 可容納元素個數 例如 double a int length length sizeof a sizeof a 0 陣列佔記憶體總空間,除以單個元素佔記憶體空間大小 printf length of a d length 輸出length...

Oracle HowTo 如何獲得資料庫的DBID

在進行資料庫恢復的過程中,很多時候我們需要知道oracle資料庫的dbid,通常有以下幾種方法可以獲得資料庫的dbid.1.查詢v database獲得 由於dbid在控制檔案和資料檔案中都存在記錄,所以如果能夠mount資料庫就可以查詢v database檢視獲得.sql alter databa...