前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >25.Python基础函数与推导式详解

25.Python基础函数与推导式详解

作者头像
全栈若城
发布于 2025-04-28 03:11:46
发布于 2025-04-28 03:11:46
8400
代码可运行
举报
文章被收录于专栏:若城技术专栏若城技术专栏
运行总次数:0
代码可运行

本教程专为Python初学者设计,将深入浅出地讲解Python中几个常用且强大的特性:推导式、zip函数、reversed函数和sorted函数。通过本教程,即使是零基础的小白也能轻松掌握这些实用技巧!

一、Python推导式:快速初始化各种序列 🔥

1. 什么是推导式?

推导式(Comprehension)是Python中的一种独特语法,可以让你用一行简洁的代码创建序列(如列表、字典、集合等)。它不仅代码简洁,而且执行效率通常比传统循环更高。

2. 列表推导式

列表推导式是最常用的推导式类型,用于快速创建列表。

基本语法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[表达式 for 变量 in 可迭代对象 if 条件]
简单示例:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建一个包含110的平方的列表
平方列表 = [x**2 for x in range(1, 11)]
print(平方列表)  # 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# 创建一个只包含偶数平方的列表
偶数平方列表 = [x**2 for x in range(1, 11) if x % 2 == 0]
print(偶数平方列表)  # 输出: [4, 16, 36, 64, 100]
等价的传统循环:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用传统循环创建平方列表
平方列表 = []
for x in range(1, 11):
    平方列表.append(x**2)
print(平方列表)  # 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
3. 字典推导式

字典推导式用于快速创建字典。

基本语法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{键表达式: 值表达式 for 变量 in 可迭代对象 if 条件}
示例:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建一个数字及其平方的字典
平方字典 = {x: x**2 for x in range(1, 6)}
print(平方字典)  # 输出: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

# 将列表中的元素作为键,其长度作为值
水果列表 = ['苹果', '香蕉', '橙子', '西瓜']
水果长度字典 = {水果: len(水果) for 水果 in 水果列表}
print(水果长度字典)  # 输出: {'苹果': 2, '香蕉': 2, '橙子': 2, '西瓜': 2}
4. 集合推导式

集合推导式用于快速创建集合(无重复元素的集合)。

基本语法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{表达式 for 变量 in 可迭代对象 if 条件}
示例:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建一个包含110的平方的集合
平方集合 = {x**2 for x in range(1, 11)}
print(平方集合)  # 输出: {64, 1, 4, 36, 100, 9, 16, 49, 81, 25}(顺序可能不同)

# 提取字符串中的所有不同字符
字符集合 = {字符 for 字符 in "Hello, Python!"}
print(字符集合)  # 输出: {'!', ' ', 'e', 'y', 'l', 'n', 'o', 'P', ',', 'H', 't', 'h'}(顺序可能不同)
5. 生成器表达式

生成器表达式类似于列表推导式,但它不会一次性创建所有元素,而是按需生成,更节省内存。

基本语法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(表达式 for 变量 in 可迭代对象 if 条件)
示例:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建一个生成平方数的生成器
平方生成器 = (x**2 for x in range(1, 11))

# 使用生成器
for 平方 in 平方生成器:
    print(平方, end=' ')
# 输出: 1 4 9 16 25 36 49 64 81 100
6. 推导式的实际应用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 数据处理:提取文本中的所有数字
文本 = "今天是2023年12月25日,气温-5°C"
数字列表 = [int(字符) for 字符 in 文本 if 字符.isdigit()]
print(数字列表)  # 输出: [2, 0, 2, 3, 1, 2, 2, 5, 5]

# 文件处理:获取目录中所有的.py文件
import os
py文件 = [文件 for 文件 in os.listdir('./') if 文件.endswith('.py')]
print(py文件)  # 输出当前目录中所有的.py文件

二、Python zip函数:并行处理多个序列 🔄

1. zip函数简介

zip函数用于将多个可迭代对象(如列表、元组等)中对应位置的元素打包成一个个元组,返回由这些元组组成的迭代器。

2. 基本语法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
zip(*iterables)
3. 简单示例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 合并两个列表
姓名 = ['张三', '李四', '王五']
年龄 = [18, 20, 22]

# 使用zip合并
人员信息 = zip(姓名, 年龄)

# 转换为列表查看结果
print(list(人员信息))  # 输出: [('张三', 18), ('李四', 20), ('王五', 22)]
4. 遍历多个列表
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
姓名 = ['张三', '李四', '王五']
年龄 = [18, 20, 22]
城市 = ['北京', '上海', '广州']

# 同时遍历三个列表
for 名字, 岁数, 所在城市 in zip(姓名, 年龄, 城市):
    print(f"{名字}今年{岁数}岁,住在{所在城市}。")

# 输出:
# 张三今年18岁,住在北京。
# 李四今年20岁,住在上海。
# 王五今年22岁,住在广州。
5. 处理不等长序列

当zip的参数长度不同时,结果的长度取决于最短的参数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
列表1 = [1, 2, 3, 4, 5]
列表2 = ['a', 'b', 'c']

结果 = list(zip(列表1, 列表2))
print(结果)  # 输出: [(1, 'a'), (2, 'b'), (3, 'c')]
6. 创建字典
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
键列表 = ['name', 'age', 'city']
值列表 = ['张三', 18, '北京']

# 使用zip和dict创建字典
人员字典 = dict(zip(键列表, 值列表))
print(人员字典)  # 输出: {'name': '张三', 'age': 18, 'city': '北京'}
7. 解压(unzip)操作
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 打包数据
打包数据 = [('张三', 18), ('李四', 20), ('王五', 22)]

# 解压数据
姓名, 年龄 = zip(*打包数据)

print(姓名)  # 输出: ('张三', '李四', '王五')
print(年龄)  # 输出: (18, 20, 22)

三、Python reversed函数:反转序列 🔄

1. reversed函数简介

reversed函数用于返回一个反转的迭代器,可以按照相反的顺序遍历序列中的元素。

2. 基本语法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
reversed(sequence)
3. 支持的序列类型

reversed函数可以处理的序列类型包括:列表、元组、字符串、range对象等。

4. 简单示例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 反转列表
数字列表 = [1, 2, 3, 4, 5]
反转迭代器 = reversed(数字列表)

# 转换为列表查看结果
print(list(反转迭代器))  # 输出: [5, 4, 3, 2, 1]

# 反转字符串
字符串 = "Python"
反转字符串 = ''.join(reversed(字符串))
print(反转字符串)  # 输出: "nohtyP"

# 反转元组
元组 = (10, 20, 30, 40, 50)
print(tuple(reversed(元组)))  # 输出: (50, 40, 30, 20, 10)

# 反转range
范围 = range(1, 6)
print(list(reversed(范围)))  # 输出: [5, 4, 3, 2, 1]
5. 在循环中使用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 倒序遍历列表
水果列表 = ['苹果', '香蕉', '橙子', '西瓜']

print("倒序输出水果:")
for 水果 in reversed(水果列表):
    print(水果)

# 输出:
# 倒序输出水果:
# 西瓜
# 橙子
# 香蕉
# 苹果
6. 与其他方法的比较
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用reversed
列表1 = [1, 2, 3, 4, 5]
反转列表1 = list(reversed(列表1))
print(反转列表1)  # 输出: [5, 4, 3, 2, 1]

# 使用列表的reverse方法
列表2 = [1, 2, 3, 4, 5]
列表2.reverse()  # 直接修改原列表
print(列表2)  # 输出: [5, 4, 3, 2, 1]

# 使用切片
列表3 = [1, 2, 3, 4, 5]
反转列表3 = 列表3[::-1]  # 创建新列表
print(反转列表3)  # 输出: [5, 4, 3, 2, 1]

注意

  • reversed()返回一个迭代器,不修改原序列
  • list.reverse()直接修改原列表,不返回新列表
  • 切片[::-1]创建一个新的反转序列

四、Python sorted函数:排序序列 📊

1. sorted函数简介

sorted函数用于对可迭代对象进行排序,返回一个新的已排序列表,原序列不变。

2. 基本语法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sorted(iterable, key=None, reverse=False)

参数说明:

  • iterable:要排序的可迭代对象
  • key:指定排序的依据,是一个函数
  • reverse:是否降序排列,默认为False(升序)
3. 简单示例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 对列表排序
数字列表 = [3, 1, 4, 1, 5, 9, 2, 6]
排序后 = sorted(数字列表)
print(排序后)  # 输出: [1, 1, 2, 3, 4, 5, 6, 9]

# 原列表不变
print(数字列表)  # 输出: [3, 1, 4, 1, 5, 9, 2, 6]

# 降序排列
降序排列 = sorted(数字列表, reverse=True)
print(降序排列)  # 输出: [9, 6, 5, 4, 3, 2, 1, 1]
4. 使用key参数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 按字符串长度排序
水果列表 = ['苹果', '香蕉', '猕猴桃', '葡萄', '西瓜']
按长度排序 = sorted(水果列表, key=len)
print(按长度排序)  # 输出: ['苹果', '香蕉', '葡萄', '西瓜', '猕猴桃']

# 忽略大小写排序
英文列表 = ['apple', 'Banana', 'cherry', 'Date']
忽略大小写排序 = sorted(英文列表, key=str.lower)
print(忽略大小写排序)  # 输出: ['apple', 'Banana', 'cherry', 'Date']
5. 排序字典
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 按键排序
成绩字典 = {'张三': 85, '李四': 92, '王五': 78, '赵六': 96}
按键排序 = sorted(成绩字典.items())
print(按键排序)  # 输出: [('张三', 85), ('李四', 92), ('王五', 78), ('赵六', 96)]

# 按值排序
按成绩排序 = sorted(成绩字典.items(), key=lambda x: x[1])
print(按成绩排序)  # 输出: [('王五', 78), ('张三', 85), ('李四', 92), ('赵六', 96)]

# 按成绩降序排序
按成绩降序 = sorted(成绩字典.items(), key=lambda x: x[1], reverse=True)
print(按成绩降序)  # 输出: [('赵六', 96), ('李四', 92), ('张三', 85), ('王五', 78)]
6. 排序自定义对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 定义一个学生类
class 学生:
    def __init__(self, 姓名, 年龄, 成绩):
        self.姓名 = 姓名
        self.年龄 = 年龄
        self.成绩 = 成绩
    
    def __repr__(self):
        return f"学生(姓名='{self.姓名}', 年龄={self.年龄}, 成绩={self.成绩})"

# 创建学生列表
学生列表 = [
    学生('张三', 18, 85),
    学生('李四', 20, 92),
    学生('王五', 19, 78),
    学生('赵六', 18, 96)
]

# 按年龄排序
按年龄排序 = sorted(学生列表, key=lambda 学生: 学生.年龄)
for 学生对象 in 按年龄排序:
    print(学生对象)

# 按成绩降序排序
按成绩排序 = sorted(学生列表, key=lambda 学生: 学生.成绩, reverse=True)
for 学生对象 in 按成绩排序:
    print(学生对象)
7. 多级排序
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 先按年龄排序,年龄相同再按成绩降序排序
多级排序 = sorted(学生列表, key=lambda 学生: (学生.年龄, -学生.成绩))
for 学生对象 in 多级排序:
    print(学生对象)

总结 📝

通过本教程,我们学习了Python中四个非常实用的特性:

  1. 推导式:一种简洁高效的创建序列的方式,包括列表推导式、字典推导式、集合推导式和生成器表达式。
  2. zip函数:用于并行处理多个序列,将它们对应位置的元素打包成元组。
  3. reversed函数:用于反转序列,返回一个反向迭代器。
  4. sorted函数:用于对序列进行排序,功能强大且灵活。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【C++】unordered_set和unordered_map
https://legacy.cplusplus.com/reference/unordered_set/
风中的云彩
2025/06/10
50
【C++ map和set】数据的吟游诗:Map与Set的双城记
前面我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的值之间一般没有紧密的关联关系,比如交换一下,他依旧是序列式容器。顺序容器中的元素是按他们在容器中的存储位置来顺序保存和访问的。
Undoom
2025/05/29
640
【C++ map和set】数据的吟游诗:Map与Set的双城记
初识C++ · map和set的使用
在前面阶段,我们已经学习了stl里面的部分容器,比如vector,list,deque等,这些容器都被称为序列式容器,也就是每个值之间式没有关联的,那么今天介绍的容器,map和set,是关联式容器,即每个值之间是有关联的,关联式容器在数据存储方面和序列式容器没有什么大差别,但是在数据检索上就很有用了,其中map的key - value模型存的键值对在数据检索方面的效率是很高的。
_lazy
2024/10/16
930
初识C++ · map和set的使用
C++ STL (标准模板库) 详细内容讲解
顺序容器有以下三种:可变长动态数组 vector、双端队列 deque、双向链表 list。
杨鹏伟
2020/09/11
2.2K0
⭐️STL⭐️之list,set,map全解,❤️算法必备❤️<下>
文章目录 😘 闲聊几句 👍 list 👍list的反转和排序 👍set/multiset 👍对组 👍map / multimap ❤️最后 😘 闲聊几句 时间过的很快,码神马上就要开学了,这也是STL系列的最后一篇了,假期学了不少,距离自己的奥赛巅峰水平可以说是十分接近了,如果说学这c++有什么用的话,可能就是兴趣所至吧,在博客更新之际,也认识了不少行业大佬,给我提了不少意见,感谢!STL完了以后,就是算法和python脚本吧,做自己想做的事情,更要做难的事情,总体来说STL的浏览量不多,但是还要说,why
秋名山码神
2022/12/13
2620
⭐️STL⭐️之list,set,map全解,❤️算法必备❤️<下>
❤ 挑战C站最强C++ STL标准库总结(内含大量示例)
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,(ノ´▽`)ノ♪-》点击这里->一个宝藏级人工智能教程网站。
全栈程序员站长
2022/09/09
1.4K0
❤ 挑战C站最强C++ STL标准库总结(内含大量示例)
【C++】详解 set && multiset && map && multiset 的使用
​ 我们已经接触过 STL 中的部分容器,比如:vector、list、deque、forward_list 等,这些容器统称为 序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。至于 stack 和 queue,他们其实不能算是容器,而应该是**容器适配器**,是用 deque 封装的。
利刃大大
2025/02/16
1130
【C++】详解 set && multiset && map && multiset 的使用
C++中STL-set详解
目录 set/ multiset容器 1. set基本概念 2.set构造和赋值 3.set大小和交换 4.set插入和删除 5.set容器-查找和统计 6.set和multiset的区别 7.pair对组创建 8.set容器排序 9.set存放自定义数据类型 ---- set/ multiset容器 1. set基本概念 简介: 所有元素都会在插入时自动被排序 本质: set/multiset属于关联式容器,底层结构是用二叉树实现。 set和multiset区别:  set不允许容器中有重复的
莫浅子
2022/12/09
4660
C++中STL-set详解
C++:set和map的使用
一般来说,像string、vector、list、deque、forward_list等容器,这些容器的底层逻辑机构为线性序列的数据结构,所以这些容器也叫做序列式容器,序列式容器两个位置存储的值之间一般没有紧密的关联关系,如若将其交换,依旧是序列式容器。序列式容器中的元素是按他们在容器中的存储位置保存和访问的。
HZzzzzLu
2024/11/26
1780
C++:set和map的使用
【C++指南】你真的了解map和set吗?【上】
序列式容器:前文所讲的STL中的string、vector、list、deque、array、forward_list等容器,我们都称为序列式容器,因为它们的逻辑结构是线性序列的,两个位置存储的值之间⼀般没有紧密的关联关系,⽐如交换⼀下,他依旧是序列式容器。
egoist祈
2025/03/22
950
【C++指南】你真的了解map和set吗?【上】
STL_set/multiset
简介:本文主要介绍STL中的,set与multiset的使用,只需要把本文的代码自己敲完便可学会。
GeekLiHua
2025/01/21
850
STL_set/multiset
C++进阶:详细讲解容器set与map(pair、multiset、multimap)
std::pair 是C++标准库中提供的一个简单的键值对实现。它包含在 <utility> 头文件中。一个 std::pair 有两个公有成员:first 和 second,分别表示键和值==(first<= =>key ; second<= =>value)==
是Nero哦
2024/04/10
5020
C++进阶:详细讲解容器set与map(pair、multiset、multimap)
【c++丨STL】set/multiset的使用
之前,我们已经探索了STL中的多个容器及容器适配器,如string、vector、list,以及stack和priority_queue等。今天,我们将进一步拓宽视野,深入学习STL中的容器——set及其变种multiset。
ephemerals__
2024/12/25
1550
【c++丨STL】set/multiset的使用
【C++】map和set
在初阶阶段,我们已经接触过STL中的部分容器,比如:vector、list、deque、 forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身,存储的数据之间没有关联。那什么是关联式容器?它与序列式容器有什么区别?
zxctscl
2024/11/29
1280
【C++】map和set
C++ —— set系列的使用
https://legacy.cplusplus.com/reference/set/
迷迭所归处
2024/11/19
1000
C++ —— set系列的使用
C++ STL学习之容器set和multiset (补充材料)
一、set和multiset基础 set和multiset会根据特定的排序准则,自动将元素进行排序。不同的是后者允许元素重复而前者不允许。 需要包含头文件: #include <set> set和mu
Angel_Kitty
2018/04/08
1.2K0
C++ STL学习之容器set和multiset (补充材料)
【C++】map和set的使用
  vector、list、dequeforward_list(C++11)等,这些容器统称为 序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。那什么是关联式容器?它与序列式容器有什么区别?
用户11029129
2024/08/14
1230
【C++】map和set的使用
【C++进阶篇】C++容器完全指南:掌握set和map的使用,提升编码效率
在C++中,容器是存储和操作数据的核心工具。序列式容器(如vector、list)通过线性顺序存储数据,而关联式容器(如set、map)则通过键值对存储数据,允许更高效的查找、插入和删除。set是一个存储唯一元素的容器,内部自动排序,底层通常使用红黑树实现。它支持高效的查找和元素去重。map是存储键值对的容器,每个键都是唯一的,值可以重复,同样基于红黑树实现,提供快速的键值对查找。在需要快速检索、插入或删除元素时,set和map是非常实用的选择。
熬夜学编程的小王
2025/05/19
1830
【C++/STL】map和set介绍
vector、list、deque等这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。
秦jh
2024/07/23
910
【C++/STL】map和set介绍
map和set的概念及使用
树型结构的关联式容器主要有四种:map、set、multimap、multiset四种容器的共同点是:使用平衡搜索树(即红黑树)作为其底层结果,容器中的元素是一个有序的序列。
海盗船长
2020/08/27
6740
推荐阅读
相关推荐
【C++】unordered_set和unordered_map
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 一、Python推导式:快速初始化各种序列 🔥
    • 1. 什么是推导式?
    • 2. 列表推导式
      • 基本语法:
      • 简单示例:
      • 等价的传统循环:
    • 3. 字典推导式
      • 基本语法:
      • 示例:
    • 4. 集合推导式
      • 基本语法:
      • 示例:
    • 5. 生成器表达式
      • 基本语法:
      • 示例:
    • 6. 推导式的实际应用
  • 二、Python zip函数:并行处理多个序列 🔄
    • 1. zip函数简介
    • 2. 基本语法
    • 3. 简单示例
    • 4. 遍历多个列表
    • 5. 处理不等长序列
    • 6. 创建字典
    • 7. 解压(unzip)操作
  • 三、Python reversed函数:反转序列 🔄
    • 1. reversed函数简介
    • 2. 基本语法
    • 3. 支持的序列类型
    • 4. 简单示例
    • 5. 在循环中使用
    • 6. 与其他方法的比较
  • 四、Python sorted函数:排序序列 📊
    • 1. sorted函数简介
    • 2. 基本语法
    • 3. 简单示例
    • 4. 使用key参数
    • 5. 排序字典
    • 6. 排序自定义对象
    • 7. 多级排序
  • 总结 📝
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档