如何对 Python 列表进行排序和切片

Python中的列表是非常强大的数据结构,允许存储不同类型的元素,并提供了丰富的方法进行操作和处理。排序和切片是其中两种常见且重要的操作。

一、列表排序

排序是指将列表中的元素按照某种顺序排列,通常是从小到大或从大到小。在Python中,列表的排序可以通过内置的sorted()函数和列表的方法sort()来实现。

1.1 sorted()函数

sorted()函数返回一个新的排序列表,而不修改原列表。它的基本语法如下:

sorted(iterable, key=None, reverse=False)
  • iterable:表示要排序的列表或其他可迭代对象。
  • key:指定一个函数,此函数用于从每个元素中提取用于比较的键。
  • reverse:如果为True,则按降序排序。

示例如下:

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = sorted(numbers)
print("Sorted list:", sorted_numbers)
print("Original list:", numbers)

输出:

Sorted list: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
Original list: [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]

可以看到,sorted()函数没有改变原列表,而是返回了一个新的排序列表。

1.2 sort()方法

sort()方法会直接对原列表进行排序,不返回新的列表。其语法如下:

list.sort(key=None, reverse=False)

示例如下:

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
numbers.sort()
print("Sorted list:", numbers)

输出:

Sorted list: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

可以看到,sort()方法直接对原列表进行了排序。

1.3 使用key参数进行排序

key参数用于指定一个函数,此函数用于从每个元素中提取用于比较的键。例如,按字符串长度排序:

words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=len)
print("Sorted by length:", sorted_words)

输出:

Sorted by length: ['date', 'apple', 'banana', 'cherry']
1.4 按照自定义规则排序

通过定义一个自定义的比较函数,可以实现复杂的排序规则。比如按元组的第二个元素排序:

tuples = [(1, 3), (2, 2), (3, 1)]
sorted_tuples = sorted(tuples, key=lambda x: x[1])
print("Sorted by second element:", sorted_tuples)

输出:

Sorted by second element: [(3, 1), (2, 2), (1, 3)]
二、列表切片

切片是指从列表中提取一个子列表。切片操作符号是:,其基本语法如下:

list[start:stop:step]
  • start:起始索引(包含),默认为0。
  • stop:结束索引(不包含),默认为列表长度。
  • step:步长,默认为1。
2.1 基本切片操作

基本切片操作可以提取列表的一个子列表。例如:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("Sliced list (2:5):", numbers[2:5])

输出:

Sliced list (2:5): [2, 3, 4]
2.2 步长切片

通过指定步长,可以每隔几个元素提取一个元素。例如:

print("Sliced list (0:10:2):", numbers[0:10:2])

输出:

Sliced list (0:10:2): [0, 2, 4, 6, 8]
2.3 省略参数

如果省略start,表示从列表开头开始;如果省略stop,表示一直到列表末尾;如果省略step,表示步长为1。例如:

print("Sliced list (:3):", numbers[:3])
print("Sliced list (7:):", numbers[7:])
print("Sliced list (::2):", numbers[::2])

输出:

Sliced list (:3): [0, 1, 2]
Sliced list (7:): [7, 8, 9]
Sliced list (::2): [0, 2, 4, 6, 8]
2.4 负索引和反向切片

负索引表示从列表末尾开始。例如,-1表示最后一个元素,-2表示倒数第二个元素。反向切片可以通过负步长实现。例如:

print("Sliced list (-3:):", numbers[-3:])
print("Sliced list (::-1):", numbers[::-1])

输出:

Sliced list (-3:): [7, 8, 9]
Sliced list (::-1): [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
2.5 多维列表的切片

对于多维列表,可以通过多次索引和切片操作来提取子列表。例如:

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
print("First row:", matrix[0])
print("First column:", [row[0] for row in matrix])
print("Submatrix:", [row[1:] for row in matrix[1:]])

输出:

First row: [1, 2, 3]
First column: [1, 4, 7]
Submatrix: [[5, 6], [8, 9]]
三、排序与切片综合实例

下面通过一个综合实例,展示排序和切片的结合使用。

实例:按学生成绩排序并提取前五名

假设有一组学生的成绩数据,我们需要按成绩从高到低排序,并提取前五名的学生信息。

students = [
    {"name": "Alice", "score": 88},
    {"name": "Bob", "score": 95},
    {"name": "Charlie", "score": 90},
    {"name": "David", "score": 85},
    {"name": "Eve", "score": 92},
    {"name": "Frank", "score": 84},
    {"name": "Grace", "score": 93},
]

# 按成绩从高到低排序
sorted_students = sorted(students, key=lambda x: x['score'], reverse=True)

# 提取前五名学生
top_5_students = sorted_students[:5]

# 输出结果
print("Top 5 students:")
for student in top_5_students:
    print(f"{student['name']}: {student['score']}")

输出:

Top 5 students:
Bob: 95
Grace: 93
Eve: 92
Charlie: 90
Alice: 88

通过sorted()函数和sort()方法可以实现对列表的排序,支持按自定义规则进行排序。通过切片操作可以方便地提取列表的子列表,支持正向和反向切片以及多维列表的切片。掌握这些操作,可以大大提高处理列表数据的效率和灵活性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/769819.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

谷粒商城笔记-02-项目整体效果展示

这是整个项目的第2集。 主要内容是: 演示了谷粒商城的后台管理系统 演示了商城系统 项目第一阶段[分布式基础篇]的主要内容及这个阶段完成后能达到的技能水平项目第一阶段[分布式高级篇]的主要内容及这个阶段完成后能达到的技能水平项目第一阶段[高可用集群篇]的主…

专利优先权是什么

专利优先权:定义、分类与重要性 在专利的世界中,专利优先权是一个至关重要的概念。它不仅是专利申请人权益的保障,更是确保创新成果得到及时和充分保护的重要工具。 一、专利优先权的定义 专利优先权是指专利申请人就其发明创造第一次在某…

【期末复习】数据库系统概论(附带考点汇总)

第1章.绪论 目录 第1章.绪论1.1. 数据库系统概述1.1.1.基本概念1.1.2.产生和发展 1.2.概念模型1.2.1.三种模型1.2.2.概念模型1.2.3.关系模型 1.3.数据库系统结构1.3.1三级模式结构1.3.2.两级映像与数据独立性 第2章.关系型数据库2.1.关系2.2.关系操作2.2.1.基本关系操作2.2.2.关…

从关键新闻和最新技术看AI行业发展(2024.6.17-6.30第二十六期) |【WeThinkIn老实人报】

写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术,同时Rocky会对这些关键信息进行解读,力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议,一起交流学习💪 欢迎大家关注Rocky的公众号&…

万界星空科技QMS系统:重塑质量管理新纪元

万界星空科技QMS(Quality Management System)质量管理系统是一套全面、高效的质量管理工具,旨在帮助企业提升产品质量、优化生产流程、降低质量成本。该系统具备多个具体功能模块,以下是对其主要功能模块的详细介绍: 一…

数据泄露时代的安全之道:访问认证的重要性

引言 想象一下:你一觉醒来,收到一条通知——你的公司遭遇了数据泄露。你感到恐惧,因为这意味着客户数据被曝光,公司声誉受损,还有巨额罚款在等着你。在当今的数字化环境中,这种情况太常见了。全球各地的组…

Android sdk 安装已经环境配置

🍎个人博客:个人主页 🏆个人专栏:Android ⛳️ 功不唐捐,玉汝于成 目录 正文 一、下载 二、安装 三、环境配置 我的其他博客 正文 一、下载 1、大家可去官网下载 因为需要魔法 所以就不展示了 2、去下面这…

【启明智显分享】启明智显2.8寸COF触摸串口屏:一体黑设计与塑料框架相结合

在我们不断追求智能化、科技化生活的年代,越来越多的高科技产品为我们的日常生活带来了无与伦比的便利。智能屏已经成为智能化进程中的重要组成部分,其设计的美观性、便携性、耐用性都成为产品选型的重要依据。 启明智显近期推出了一款基于乐鑫ESP32-S3R…

城镇居民社区再生资源回收系统-计算机毕业设计源码04175

摘 要 本论文介绍了一个基于SSM(Spring Spring MVC MyBatis)技术的城镇居民社区再生资源回收系统的设计与实现。随着社会对环境保护意识的不断提高,再生资源回收成为了一种重要的环保行动。然而,传统的再生资源回收方式存在着信…

ELISA实验前,需要做好哪些准备?

进行ELISA试剂盒实验前,需要进行周密的准备工作以确保实验的顺利进行和实验的准确性。那么,具体应该做哪些准备呢?欣博盛生物为您总结了一些关键的准备工作步骤: 1. 阅读说明书 仔细阅读ELISA试剂盒的说明书,了解试剂…

Day03-Jenkins与集成案例

Day03-Jenkins与集成案例 6. CD持续交付,持续部署实现方案7. 案例04: basketball案例,搭建开发测试专用的任务7.1 任务要求7.2 步骤7.3 详细步骤1)安装插件2)创建任务 7.4 gitlab配置钩子1) 解除钩子局域网访问限制2) gitlab配置钩子 7.5 与部…

IDEA开发必备的插件,实测非常好用

1、Lombok -- 简化Java代码开发 推荐指数: ★★★★★ Lombok:首当其冲的非常推荐的当然是Lombok Lombok能以简单的注解形式来简化Java代码,提高开发人员的开发效率。例如开发中经常需要写的JavaBean,都需要花时间去添加相应的ge…

实战大数据:分布式大数据分析处理系统的开发与应用

💂 个人网站:【 摸鱼游戏】【网址导航】【神级代码资源网站】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

linux服务器安全级别提升配置修改

linux服务器安全级别提升配置修改 说明修改登录密码策略步骤 设置用户密码定期更新登录失败次数锁定步骤 锁定系统重要文件文件说明锁定文件解锁文件 防火墙设置firewalld防火墙查看防火墙状态开启防火墙关闭防火墙重新加载防火墙配置添加端口移除端口添加IP到白名单移除白名单…

JAVA 实现拍卖框架及拍卖详情流程介绍(包含代码示咧)

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

Java项目:基于SSM框架实现的网上医院预约挂号系统【ssm+B/S架构+源码+数据库+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的网上医院预约挂号系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、…

9.计算机视觉—目标检测

目录 1.物体检测边缘框目标检测数据集总结边缘框代码实现2.锚框:目标检测的一种方法IoU—交并比赋予锚框标号使用非极大值抑制(NMS)输出总结代码实现1.物体检测 边缘框 一个边缘框可以通过四个数字定义 (左上x,左上y),(右下x,右下y)(左上x,左上y,宽,高)(中间x,中间y…

铜排载流量计算

母线载流量的理论计算 有些设计规范给出了根据电流密度确定母线大小的标准,一般铜母线的要求是每平方毫米载流量1.55A,但只可以作为设计“自由空气中的单导体母线”的参考,不可以作为实际设备中选择母线截面积的方法。也有些设计手册里给出了…

使用Ckman部署ClickHouse集群介绍

使用Ckman部署ClickHouse集群介绍 1. Ckman简介 ClickHouse Manager是一个为ClickHouse数据库量身定制的管理工具,它是由擎创科技数据库团队主导研发的一款用来管理和监控ClickHouse集群的可视化运维工具。目前该工具已在github上开源,开源地址为&…

WordPress主题大前端DUX v8.7源码下载

全新:用户注册流程,验证邮箱,设置密码 新增:列表显示小视频和横幅视频 新增:文章内容中的外链全部增加 nofollow 新增:客服功能中的链接添加 nofollow 优化:产品分类的价格显示