欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python數(shù)組排序方法之sort、sorted和argsort詳解

 更新時間:2022年03月09日 11:56:42   作者:什么都干的派森  
這篇文章主要給大家介紹了關(guān)于python數(shù)組排序方法之sort、sorted和argsort的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

引言

這三個排序方法應(yīng)對日常工作基本夠用

先說一下三者的區(qū)別

  • sort, sorted 是用在 list 數(shù)據(jù)類型中的排序方法
  • argsort 是用在 numpy 數(shù)據(jù)類型中的排序方法( numpy 里也有一個 sort 方法,下面會講)

sort 和 sorted 的區(qū)別如下??

先看兩個簡單的升序排序,分別使用 sorted 和 sort 方法

# sorted 
num_list = [1, 8, 2, 3, 10, 4, 5]
ordered_list = sorted(num_list)
print(ordered_list)    # [1, 2, 3, 4, 5, 8, 10]
# sort
num_list = [1, 8, 2, 3, 10, 4, 5]
num_list.sort()
print(num_list)    # [1, 2, 3, 4, 5, 8, 10]

可以看出 sorted 并沒有修改原來的數(shù)組,而是將排序的結(jié)果作為參數(shù)傳遞給一個新的數(shù)組,而 sort 則在原數(shù)組上直接進行了排序
區(qū)別就是 sorted 需要一個變量接收排序結(jié)果,sort不用

建議使用 sorted,因為 sort 雖然代碼更簡潔,但是會修改原數(shù)組,這樣不靈活,如果你有多個地方同時使用了這個數(shù)組,那么經(jīng)過 sort 操作之后的數(shù)組就已經(jīng)不是原來那個數(shù)組了,

debug的時候很麻煩,說完了區(qū)別,來具體講講使用方法

用法實例

1.升序排序

# sorted 升序排序
num_list = [1, 8, 2, 3, 10, 4, 5]
ordered_list = sorted(num_list)
print(ordered_list)    # [1, 2, 3, 4, 5, 8, 10]
# sort 升序排序
num_list = [1, 8, 2, 3, 10, 4, 5]
num_list.sort()
print(num_list)    # [1, 2, 3, 4, 5, 8, 10]

2.降序排序

# sorted 降序排序
num_list = [1, 8, 2, 3, 10, 4, 5]
ordered_list = sorted(num_list, reverse=True)
print(ordered_list)    # [1, 2, 3, 4, 5, 8, 10]
# sort 降序排序
num_list = [1, 8, 2, 3, 10, 4, 5]
num_list.sort(reverse=True)
print(num_list)    # [1, 2, 3, 4, 5, 8, 10]

3.如果不想要排序后的值,想要排序后的索引,可以這樣做

num_list = [1, 8, 2, 3, 10, 4, 5]
ordered_list = sorted(range(len(num_list)), key=lambda k: num_list[k])
print(ordered_list)    # [0, 2, 3, 5, 6, 1, 4]

4.字符串類型排序

# 字符串類型排序
str_list = ['1', '8', '2', '3', '10', '4', '5']
ordered_list = sorted(str_list)
print(ordered_list)  # ['1', '10', '2', '3', '4', '5', '8']

str_list = ['A', 'D', 'B', 'N', 'C', 'R', 'V']
ordered_list = sorted(str_list)
print(ordered_list)  # ['A', 'B', 'C', 'D', 'N', 'R', 'V']

5.二維數(shù)組排序

book_list = [
    ['北大馬克思主義研究', '9787509728529', 2011],
    ['人的解放', '9787215064003', 2014],
    ['西方經(jīng)典悅讀 資本論', '9787200092882', 2012],
    ['列寧的一生', '9787501319343', 2013],
]

# sorted 按出版年升序排序
ordered_list = sorted(book_list, key=lambda book: book[2])
print(ordered_list)    # [['北大馬克思主義研究', '9787509728529', 2011], ['西方經(jīng)典悅讀 資本論', '9787200092882', 2012], ['列寧的一生', '9787501319343', 2013], ['人的解放', '9787215064003', 2014]]

# sort 按出版年降序排序
book_list.sort(key=lambda book: book[2], reverse=True)
print(book_list)    # [['人的解放', '9787215064003', 2014], ['列寧的一生', '9787501319343', 2013], ['西方經(jīng)典悅讀 資本論', '9787200092882', 2012], ['北大馬克思主義研究', '9787509728529', 2011]]

6.二維數(shù)組獲取排序后的索引

# sorted 獲取排序后的索引
book_list = [
    ['北大馬克思主義研究', '9787509728529', 2011],
    ['人的解放', '9787215064003', 2014],
    ['西方經(jīng)典悅讀 資本論', '9787200092882', 2012],
    ['列寧的一生', '9787501319343', 2013],
]
ordered_list = sorted(range(len(book_list)), key=lambda k: book_list[k][2])
print(ordered_list)  # [0, 2, 3, 1]

7.字典數(shù)組排序

book_list = [
    {'name': '北大馬克思主義研究', 'isbn': '9787509728529', 'publish_year': 2011},
    {'name': '人的解放', 'isbn': '9787215064003', 'publish_year': 2014},
    {'name': '西方經(jīng)典悅讀 資本論', 'isbn': '9787200092882', 'publish_year': 2012},
    {'name': '列寧的一生', 'isbn': '9787501319343', 'publish_year': 2013},
]
# sorted 按出版年降序排序
ordered_list = sorted(book_list, key=lambda book: book['publish_year'], reverse=True)
print(ordered_list)    # [{'name': '人的解放', 'isbn': '9787215064003', 'publish_year': 2014}, {'name': '列寧的一生', 'isbn': '9787501319343', 'publish_year': 2013}, {'name': '西方經(jīng)典悅讀 資本論', 'isbn': '9787200092882', 'publish_year': 2012}, {'name': '北大馬克思主義研究', 'isbn': '9787509728529', 'publish_year': 2011}]
# sort 按出版年升序排序
book_list.sort(key=lambda book: book['publish_year'])
print(book_list)    # [{'name': '北大馬克思主義研究', 'isbn': '9787509728529', 'publish_year': 2011}, {'name': '西方經(jīng)典悅讀 資本論', 'isbn': '9787200092882', 'publish_year': 2012}, {'name': '列寧的一生', 'isbn': '9787501319343', 'publish_year': 2013}, {'name': '人的解放', 'isbn': '9787215064003', 'publish_year': 2014}]

8.字典數(shù)組獲取排序后的索引

book_list = [
    {'name': '北大馬克思主義研究', 'isbn': '9787509728529', 'publish_year': 2011},
    {'name': '人的解放', 'isbn': '9787215064003', 'publish_year': 2014},
    {'name': '西方經(jīng)典悅讀 資本論', 'isbn': '9787200092882', 'publish_year': 2012},
    {'name': '列寧的一生', 'isbn': '9787501319343', 'publish_year': 2013},
]
ordered_list = sorted(range(len(book_list)), key=lambda k: book_list[k]['publish_year'])
print(ordered_list)  # [0, 2, 3, 1]

9.對象排序

class Book(object):
    def __init__(self, name, isbn, publish_year):
        self.name = name
        self.isbn = isbn
        self.publish_year = publish_year
    def __repr__(self):
        return repr((self.name, self.isbn, self.publish_year))
book_list = [
    Book('北大馬克思主義研究', '9787509728529', 2011),
    Book('人的解放', '9787215064003', 2014),
    Book('西方經(jīng)典悅讀 資本論', '9787200092882', 2012),
    Book('列寧的一生', '9787501319343', 2013),
]
# sorted 按出版年降序排序
ordered_list = sorted(book_list, key=lambda book: book.publish_year, reverse=True)
print(ordered_list)  # [('人的解放', '9787215064003', 2014), ('列寧的一生', '9787501319343', 2013), ('西方經(jīng)典悅讀 資本論', '9787200092882', 2012), ('北大馬克思主義研究', '9787509728529', 2011)]
# sort 按出版年升序排序
book_list.sort(key=lambda book: book.publish_year)
print(book_list)  # [('北大馬克思主義研究', '9787509728529', 2011), ('西方經(jīng)典悅讀 資本論', '9787200092882', 2012), ('列寧的一生', '9787501319343', 2013), ('人的解放', '9787215064003', 2014)]

10.對象排序獲取排序后的索引

book_list = [
    Book('北大馬克思主義研究', '9787509728529', 2011),
    Book('人的解放', '9787215064003', 2014),
    Book('西方經(jīng)典悅讀 資本論', '9787200092882', 2012),
    Book('列寧的一生', '9787501319343', 2013),
]
ordered_list = sorted(range(len(book_list)), key=lambda k: book_list[k].publish_year)
print(ordered_list)  # [0, 2, 3, 1]

11.一維數(shù)組排序【numpy】

numpy 只有 sort 沒有 sorted,且 numpy 的 sort 方法 和 list 的 sorted 方法使用起來類似

import numpy as np

# 一維數(shù)組
num_list = np.array([1, 8, 2, 3, 10, 4, 5])
index_list = np.sort(num_list)
print(index_list)    # [ 1  2  3  4  5  8 10]

12.一維數(shù)組獲取排序后的索引【numpy】

num_list = np.array([1, 8, 2, 3, 10, 4, 5])
index_list = np.argsort(num_list)
print(index_list)    # [0 2 3 5 6 1 4]

13.一維數(shù)組降序排序【numpy】

# # 降序排序
num_list = np.array([1, 8, 2, 3, 10, 4, 5])
index_list = np.argsort(-num_list)    # 加負(fù)號按降序排序
print(index_list)  # [4 1 6 5 3 2 0]

14.二維數(shù)組排序【numpy】

num_list = np.array([
    [1, 8, 2, 9],
    [8, 2, 4, 5],
    [2, 3, 7, 4],
    [1, 2, 3, 5]
])
ordered_list = np.sort(num_list, axis=0)    # axis=0 是按列排序
print(ordered_list)
# [[1 2 2 4]
#  [1 2 3 5]
#  [2 3 4 5]
#  [8 8 7 9]]

ordered_list = np.sort(num_list, axis=1)     # axis=1 是按行排序
print(ordered_list)
# [[1 2 8 9]
#  [2 4 5 8]
#  [2 3 4 7]
#  [1 2 3 5]]

15.二維數(shù)組獲取排序后的索引【numpy】

num_list = np.array([
    [1, 8, 2, 9],
    [8, 2, 4, 5],
    [2, 3, 7, 4],
    [1, 2, 3, 5]
])
ordered_list = np.argsort(num_list, axis=0)   # axis=0 是按列排序
print(ordered_list)
# [[0 1 0 2]
#  [3 3 3 1]
#  [2 2 1 3]
#  [1 0 2 0]]
ordered_list = np.argsort(num_list, axis=1)  # axis=1 是按行排序
print(ordered_list)
# [[0 2 1 3]
#  [1 2 3 0]
#  [0 1 3 2]
#  [0 1 2 3]]

附:python對數(shù)組進行排序,并輸出排序后對應(yīng)的索引值

# -*- coding: cp936 -*-
import numpy as np

#一維數(shù)組排序
arr = [1, 3, 5, 2, 4, 6]
arr = ?np.array(arr)
print arr
print np.sort(arr)#或print np.sort(arr,axis=None)

print (np.argsort(arr)) # 正序輸出索引,從小到大
print (np.argsort(-arr)) # 逆序輸出索引,從大到小

輸出結(jié)果:

[1 3 5 2 4 6]
[1 2 3 4 5 6]
[0 3 1 4 2 5]
[5 2 4 1 3 0]

#二維數(shù)組排序
list1 = [[4,3,2],[2,1,4]]
array=np.array(list1) 
print array
array.sort(axis=1) #axis=1按行排序,axis=0按列排序
print array

輸出結(jié)果:

[[4 3 2]
[2 1 4]]

[[2 3 4]
[1 2 4]]

總結(jié)

到此這篇關(guān)于python數(shù)組排序方法之sort、sorted和argsort詳解的文章就介紹到這了,更多相關(guān)python數(shù)組排序方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Python圖像處理庫Pillow常用使用方法

    詳解Python圖像處理庫Pillow常用使用方法

    PIL(Python Imaging Library)是Python一個強大方便的圖像處理庫,只支持到Python2.7。這篇文章主要介紹了Python圖像處理庫Pillow常用使用方法,需要的朋友可以參考下
    2019-09-09
  • 利用python繪制動態(tài)圣誕下雪圖

    利用python繪制動態(tài)圣誕下雪圖

    圣誕節(jié)快到了,給你最愛的人送上一顆python動態(tài)圣誕下雪圖吧,所以今天小編給大家介紹了如何利用python繪制動態(tài)圣誕下雪圖,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-12-12
  • 基于python if 判斷選擇結(jié)構(gòu)的實例詳解

    基于python if 判斷選擇結(jié)構(gòu)的實例詳解

    代碼執(zhí)行結(jié)構(gòu)為順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。這篇文章主要介紹了python if 判斷選擇結(jié)構(gòu)的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • python連接數(shù)據(jù)庫后通過占位符添加數(shù)據(jù)

    python連接數(shù)據(jù)庫后通過占位符添加數(shù)據(jù)

    在pymysql中支持對占位符的處理,開發(fā)者需要在SQL中使用“%”定義占位符,在使用excute()方法執(zhí)行時對占位符的數(shù)據(jù)進行填充即可,本文給大家介紹python連接數(shù)據(jù)庫后通過占位符添加數(shù)據(jù)的方法,需要的朋友參考下吧
    2021-12-12
  • Python讀取數(shù)據(jù)集并消除數(shù)據(jù)中的空行方法

    Python讀取數(shù)據(jù)集并消除數(shù)據(jù)中的空行方法

    今天小編就為大家分享一篇Python讀取數(shù)據(jù)集并消除數(shù)據(jù)中的空行方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • selenium在scrapy中的使用代碼

    selenium在scrapy中的使用代碼

    本文給大家分享selenium在scrapy中的使用代碼,使用selenium可以很好的幫助我們獲取一些重要數(shù)據(jù)信息,本文通過代碼給大家詳細(xì)介紹,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • djano一對一、多對多、分頁實例代碼

    djano一對一、多對多、分頁實例代碼

    在本篇文章里小編給大家整理的是關(guān)于djano一對一,多對多,分頁實例代碼以及相關(guān)知識點,需要的朋友們學(xué)習(xí)下。
    2019-08-08
  • 基于PyTorch實現(xiàn)EdgeCNN的實戰(zhàn)教程

    基于PyTorch實現(xiàn)EdgeCNN的實戰(zhàn)教程

    本文我們將使用PyTorch來簡易實現(xiàn)一個EdgeCNN,不使用PyG庫,讓新手可以理解如何PyTorch來搭建一個簡易的圖網(wǎng)絡(luò)實例demo,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • Windows 下python3.8環(huán)境安裝教程圖文詳解

    Windows 下python3.8環(huán)境安裝教程圖文詳解

    這篇文章主要介紹了Windows 下python3.8環(huán)境安裝教程圖文詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • DRF過濾排序分頁異常處理的過程記錄

    DRF過濾排序分頁異常處理的過程記錄

    在寫django drf的時候會遇到搜索,以及過濾的情況,這篇文章主要給大家介紹了關(guān)于DRF過濾排序分頁異常處理的相關(guān)資料,需要的朋友可以參考下
    2021-07-07

最新評論