本教程专为Python初学者设计,将深入浅出地讲解Python中几个常用且强大的特性:推导式、zip函数、reversed函数和sorted函数。通过本教程,即使是零基础的小白也能轻松掌握这些实用技巧!
推导式(Comprehension)是Python中的一种独特语法,可以让你用一行简洁的代码创建序列(如列表、字典、集合等)。它不仅代码简洁,而且执行效率通常比传统循环更高。
列表推导式是最常用的推导式类型,用于快速创建列表。
[表达式 for 变量 in 可迭代对象 if 条件]
# 创建一个包含1到10的平方的列表
平方列表 = [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]
# 使用传统循环创建平方列表
平方列表 = []
for x in range(1, 11):
平方列表.append(x**2)
print(平方列表) # 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
字典推导式用于快速创建字典。
{键表达式: 值表达式 for 变量 in 可迭代对象 if 条件}
# 创建一个数字及其平方的字典
平方字典 = {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}
集合推导式用于快速创建集合(无重复元素的集合)。
{表达式 for 变量 in 可迭代对象 if 条件}
# 创建一个包含1到10的平方的集合
平方集合 = {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'}(顺序可能不同)
生成器表达式类似于列表推导式,但它不会一次性创建所有元素,而是按需生成,更节省内存。
(表达式 for 变量 in 可迭代对象 if 条件)
# 创建一个生成平方数的生成器
平方生成器 = (x**2 for x in range(1, 11))
# 使用生成器
for 平方 in 平方生成器:
print(平方, end=' ')
# 输出: 1 4 9 16 25 36 49 64 81 100
# 数据处理:提取文本中的所有数字
文本 = "今天是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文件
zip函数用于将多个可迭代对象(如列表、元组等)中对应位置的元素打包成一个个元组,返回由这些元组组成的迭代器。
zip(*iterables)
# 合并两个列表
姓名 = ['张三', '李四', '王五']
年龄 = [18, 20, 22]
# 使用zip合并
人员信息 = zip(姓名, 年龄)
# 转换为列表查看结果
print(list(人员信息)) # 输出: [('张三', 18), ('李四', 20), ('王五', 22)]
姓名 = ['张三', '李四', '王五']
年龄 = [18, 20, 22]
城市 = ['北京', '上海', '广州']
# 同时遍历三个列表
for 名字, 岁数, 所在城市 in zip(姓名, 年龄, 城市):
print(f"{名字}今年{岁数}岁,住在{所在城市}。")
# 输出:
# 张三今年18岁,住在北京。
# 李四今年20岁,住在上海。
# 王五今年22岁,住在广州。
当zip的参数长度不同时,结果的长度取决于最短的参数。
列表1 = [1, 2, 3, 4, 5]
列表2 = ['a', 'b', 'c']
结果 = list(zip(列表1, 列表2))
print(结果) # 输出: [(1, 'a'), (2, 'b'), (3, 'c')]
键列表 = ['name', 'age', 'city']
值列表 = ['张三', 18, '北京']
# 使用zip和dict创建字典
人员字典 = dict(zip(键列表, 值列表))
print(人员字典) # 输出: {'name': '张三', 'age': 18, 'city': '北京'}
# 打包数据
打包数据 = [('张三', 18), ('李四', 20), ('王五', 22)]
# 解压数据
姓名, 年龄 = zip(*打包数据)
print(姓名) # 输出: ('张三', '李四', '王五')
print(年龄) # 输出: (18, 20, 22)
reversed函数用于返回一个反转的迭代器,可以按照相反的顺序遍历序列中的元素。
reversed(sequence)
reversed函数可以处理的序列类型包括:列表、元组、字符串、range对象等。
# 反转列表
数字列表 = [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]
# 倒序遍历列表
水果列表 = ['苹果', '香蕉', '橙子', '西瓜']
print("倒序输出水果:")
for 水果 in reversed(水果列表):
print(水果)
# 输出:
# 倒序输出水果:
# 西瓜
# 橙子
# 香蕉
# 苹果
# 使用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]
注意:
sorted函数用于对可迭代对象进行排序,返回一个新的已排序列表,原序列不变。
sorted(iterable, key=None, reverse=False)
参数说明:
# 对列表排序
数字列表 = [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]
# 按字符串长度排序
水果列表 = ['苹果', '香蕉', '猕猴桃', '葡萄', '西瓜']
按长度排序 = sorted(水果列表, key=len)
print(按长度排序) # 输出: ['苹果', '香蕉', '葡萄', '西瓜', '猕猴桃']
# 忽略大小写排序
英文列表 = ['apple', 'Banana', 'cherry', 'Date']
忽略大小写排序 = sorted(英文列表, key=str.lower)
print(忽略大小写排序) # 输出: ['apple', 'Banana', 'cherry', 'Date']
# 按键排序
成绩字典 = {'张三': 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)]
# 定义一个学生类
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(学生对象)
# 先按年龄排序,年龄相同再按成绩降序排序
多级排序 = sorted(学生列表, key=lambda 学生: (学生.年龄, -学生.成绩))
for 学生对象 in 多级排序:
print(学生对象)
通过本教程,我们学习了Python中四个非常实用的特性:
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有