【Python】 如何對對象列表進行排序,有點意思

在Python中,我們經常需要對對象列表進行排序,這可以通過多種方式實現。當對象是一個自定義類實例時,排序通常基于對象的一個或多個屬性。Python提供了內置的sorted()函數和列表的sort()方法,它們都允許我們指定一個排序的關鍵字。

關鍵字參數key接受一個函數,這個函數將被應用到列表中的每個元素上,排序將基于這個函數返回的結果來進行。對于對象列表,這意味著我們可以傳遞一個函數,該函數返回對象的某個屬性。

示例代碼

假設我們有一個Person類,它有兩個屬性:nameage

class Person:def __init__(self, name, age):self.name = nameself.age = agedef __repr__(self):return f"{self.name} ({self.age})"

現在,我們創建了一個Person對象列表,并希望根據age屬性進行排序。

示例1:使用sorted()函數

# 創建Person對象列表
people = [Person("Alice", 30),Person("Bob", 25),Person("Charlie", 35)
]# 根據age屬性排序
sorted_people = sorted(people, key=lambda person: person.age)
print(sorted_people)
# 輸出: [Bob (25), Alice (30), Charlie (35)]

示例2:使用列表的sort()方法

# 創建Person對象列表
people = [Person("Alice", 30),Person("Bob", 25),Person("Charlie", 35)
]# 直接在原列表上根據age屬性排序
people.sort(key=lambda person: person.age)
print(people)
# 輸出: [Bob (25), Alice (30), Charlie (35)]

示例3:根據多個屬性排序

如果我們想根據nameage進行排序,可以這樣做:

# 創建Person對象列表
people = [Person("Alice", 30),Person("Bob", 25),Person("Charlie", 30),Person("David", 25)
]# 首先根據name屬性排序,如果name相同,則根據age排序
people.sort(key=lambda person: (person.name, person.age))
print(people)
# 輸出: [Bob (25), David (25), Alice (30), Charlie (30)]

注意事項

  1. 關鍵字參數key參數是可選的,如果省略,列表將按照元素的默認比較結果進行排序。
  2. lambda函數lambda函數是一個簡潔的定義單行函數的方法,非常適合作為key參數的值。
  3. 排序穩定性:Python的排序算法是穩定的,這意味著相等的元素的相對順序在排序后保持不變。
  4. 性能考慮:對于非常大的列表,排序可能會消耗較多時間和資源。在這種情況下,可能需要考慮使用更高效的排序算法或數據結構。

結論

基于對象屬性對對象列表進行排序是Python中一個非常常見的操作。通過使用sorted()函數或列表的sort()方法,并配合key參數,我們可以輕松地實現這一功能。理解如何使用key參數和lambda函數,將使你能夠靈活地對各種類型的數據進行排序。

>
> 【痕跡】QQ+微信朋友圈和聊天記錄分析工具1.0.4 (1)純Python語言實現,使用Flask后端,本地分析,不上傳個人數據。
>
> (2)內含QQ、微信聊天記錄保存到本地的方法,真正實現自己數據自己管理。
>
> (3)數據可視化分析QQ、微信聊天記錄,提取某一天的聊天記錄與大模型對話。
>
> 下載地址:https://www.alipan.com/s/x6fqXe1jVg1
>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14148.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14148.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14148.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iPhone徹底刪除的照片怎么恢復?專業技巧助您解憂

在使用iPhone的過程中,我們可能會因為誤操作或其他原因將一些重要的照片徹底刪除。然而,即使照片被徹底刪除,也并不意味著它們就永遠消失了,它們只是被打上了“可覆蓋的空間”的標簽。 在照片被新數據覆蓋之前,我們仍…

C語言學習【C控制語句:循環】

C語言學習【C控制語句:循環】 while循環 /* 根據用戶鍵入的整數求和 */#include "stdio.h"int main(void) {long num;long sum 0L; /* 把sum初始化為0 */int status;printf("Please enter an integer to be summed");printf(&quo…

基于微信小程序的校園捐贈系統的設計與實現

校園捐贈系統是一種便捷的平臺,為校園內的各種慈善活動提供支持和便利。通過該系統,學生、教職員工和校友可以方便地進行捐贈,并了解到相關的項目信息和捐助情況。本文將介紹一個基于Java后端和MySQL數據庫的校園捐贈系統的設計與實現。 技術…

Java日期Date和LocalDateTime的工具類

Date package com.qiangesoft.utils.date;import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date;/*** 日期工具類** author lq* date 2024-05-23*/ public class DateUtil {public static final String[] CHINESE_WEEK_DAY new String[]{&q…

Excel 公式積累

1.獲取當前位置的左側單元格 引用當前單元格左側的第一個單元格:OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1) ROW()返回當前單元格的行號,COLUMN()返回當前單元格的列號。 ADDRESS函數可以根據指定行號和列號獲得工作表中的某個單元格的地址。例如…

go全部版本下載目錄

linux安裝教程: Download and install - The Go Programming Language rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.3.linux-amd64.tar.gzexport PATH$PATH:/usr/local/go/bin go version 全部版本下載目錄: All releases - Th…

鴻蒙本機通信

demo地址 https://github.com/MartinLi89/WanHarmony 目前只學到一部分,不正確的地方,還望大家指正,我會及時更新,謝謝,歡迎評論留言 線程內通信,線程間通信,進程間通信 本篇帖子中描述的比較寬…

快速開發 Chrome插件

什么是 Chrome 插件 Chrome 插件程序是一種用于增強 Google Chrome 瀏覽器功能的小型軟件應用程序。它們可以幫助用戶自定義瀏覽體驗、添加新功能、集成外部服務以及自動化任務等。擴展程序使用 HTML、CSS 和 JavaScript 編寫,利用 Chrome 提供的 API 來與瀏覽器及…

18.分布式監控zabbix-proxy

zabbix proxy 使用場景: 監控遠程區域設備監控本地網絡不穩定區域當 zabbix 監控上千設備時,使用它來減輕 server 的壓力簡化分布式監控的維護 環境規劃: zabbix-server:外網IP地址192.168.111.66 zabbix-proxy:外網IP地址192.168.111.11 內網IP地址…

AI工具推薦:提升工作效率與生活質量

有哪些好用,且國內可用的AI工具? 副本 在AI大發展的年代,還有人在工作、生活中沒有使用過AI嗎? 今天為大家推薦幾款國內可用、好用的AI工具,不論是自媒體文案寫作、打工人匯報PPT、還是論文、公文寫作,總…

設計系統采購與安裝:乙級資質申請的技術準備

在設計系統采購與安裝方面,為乙級資質申請所做的技術準備涉及多個方面。以下是一些關鍵的技術準備事項: 明確技術需求:首先,需要明確乙級資質申請所需的技術系統類型和規格。這可能包括但不限于設計軟件、工程管理系統、項目管理系…

【Linux】之【Get√】查看linux CPU 架構 ---- amd64、x86、x86_64、arm64

關于Linux軟件下載時:amd64、x86、x86_64、arm64 的說明 archuanme -alscpu

【設計模式深度剖析】【2】【創建型】【工廠方法模式】

👈?上一篇:單例模式 | 下一篇:抽象工廠模式👉? 目錄 工廠方法模式概覽工廠方法模式的定義英文原話直譯 工廠方法模式的4個角色抽象工廠(Creator)角色具體工廠(Concrete Creator)角色抽象產品&#x…

關于光照模型

關于光照模型 早期學習筆記,轉載自早期Excel。 存在大量格式錯誤、可讀性非常低,建議等待作者修復后閱讀、或者作為查找性材料使用。 中文名英文名/縮寫說明長什么樣蘭伯特光照模型Lambert Lighting1.蘭伯特反射(Lambert)是最常見的一種漫反射&#x…

iptables防火墻【其二 實驗篇】

保存&#xff0c;還原規則 防火墻規則的備份和還原 導出&#xff08;備份&#xff09;所有表的規則 iptables-save > /opt/ipt.txt 導入&#xff08;還原&#xff09;規則 iptables-restore < /opt/ipt.txt 將iptables規則文件保存在 /etc/sysconfig/iptables 中&#xf…

亞馬遜賣家賬號注冊復雜嗎?需要什么輔助工具嗎?

在當今數字化的商業世界中&#xff0c;亞馬遜作為全球最大的電商平臺之一&#xff0c;吸引著無數的賣家和買家。對于想要進入亞馬遜銷售市場的賣家來說&#xff0c;首先要完成的一項重要任務就是注冊亞馬遜賣家賬號。本文將詳細介紹亞馬遜注冊的步驟、所需時間&#xff0c;以及…

LIMS系統能解決實驗室管理的哪些痛點

LIMS&#xff08;Laboratory Information Management System&#xff0c;實驗室信息管理系統&#xff09;在解決實驗室管理的痛點方面發揮著重要作用。以下是LIMS系統能夠解決的一些主要痛點&#xff1a; 一、人工介入大量重復性工作 LIMS系統能夠自動化處理實驗室中的許多重復…

[深度學習]基于yolov8+bytetrack+pyqt5實現車輛進出流量統計+車輛實時測速實現

以前使用過yolov5deepsort實現過車輛進出流量統計車輛實時測速&#xff0c;可以看我往期視頻&#xff0c;這回改成yolov8bytetrack實現&#xff0c;實時性更好&#xff0c;原理和原來一樣。車流量進出統計車速測量優點&#xff1a; 使用目標檢測算法考慮bbox抖動&#xff0c;解…

C-數據結構-單向鏈表(帶頭節點)

單向鏈表帶頭節點&#xff08;head&#xff09;&#xff08;數據域&#xff0c;指針域&#xff09; 隨機訪問性比較差 但是插入刪除操作較為簡單。 list.h #ifndef LIST_H__ #define LIST_H__typedef int datatype;typedef struct node_st {datatype data;struct node_st *ne…

將富文本編輯器中的H標簽處理成樹形結構,支持無限層級

做富文本編輯器時&#xff0c;需要將文本里的標題整理成樹形數據&#xff0c; // 這里是數據結構 const data [{"id": "hkyrq2ndc-36yttda0lme00","text": "阿薩德阿薩德阿薩","level": 1,"depth": 1,},{"…