本文目录导读:

我来详细讲解Python中列表推导式的各种取值方法。
基础列表推导式取值
# 基本语法:[表达式 for 变量 in 可迭代对象] # 示例1:从列表中获取每个元素 numbers = [1, 2, 3, 4, 5] squared = [x**2 for x in numbers] print(squared) # [1, 4, 9, 16, 25] # 示例2:字符串列表 fruits = ['apple', 'banana', 'cherry'] upper_fruits = [fruit.upper() for fruit in fruits] print(upper_fruits) # ['APPLE', 'BANANA', 'CHERRY']
带条件筛选的列表推导式
# 语法:[表达式 for 变量 in 可迭代对象 if 条件] # 示例1:筛选偶数 numbers = [1, 2, 3, 4, 5, 6, 7, 8] even_numbers = [x for x in numbers if x % 2 == 0] print(even_numbers) # [2, 4, 6, 8] # 示例2:筛选长度大于3的字符串 words = ['hi', 'hello', 'world', 'python', 'to'] long_words = [w.upper() for w in words if len(w) > 3] print(long_words) # ['HELLO', 'WORLD', 'PYTHON'] # 示例3:多个条件 numbers = range(1, 20) specific = [x for x in numbers if x > 5 and x < 15] print(specific) # [6, 7, 8, 9, 10, 11, 12, 13, 14]
嵌套列表推导式
# 处理二维列表
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 示例1:展平二维列表
flat = [item for row in matrix for item in row]
print(flat) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 示例2:从嵌套结构中取值
students = [
{'name': '张三', 'scores': [85, 90, 78]},
{'name': '李四', 'scores': [92, 88, 95]},
{'name': '王五', 'scores': [70, 80, 85]}
]
# 获取所有学生姓名
names = [s['name'] for s in students]
print(names) # ['张三', '李四', '王五']
# 获取所有分数
all_scores = [score for s in students for score in s['scores']]
print(all_scores) # [85, 90, 78, 92, 88, 95, 70, 80, 85]
带索引的列表推导式
# 使用enumerate获取索引 fruits = ['apple', 'banana', 'orange', 'grape'] # 示例1:获取索引和值 indexed = [(i, fruit) for i, fruit in enumerate(fruits)] print(indexed) # [(0, 'apple'), (1, 'banana'), (2, 'orange'), (3, 'grape')] # 示例2:根据索引进行筛选 even_indexed = [fruit for i, fruit in enumerate(fruits) if i % 2 == 0] print(even_indexed) # ['apple', 'orange']
实用的案例分析
案例1:数据清洗
# 处理用户输入数据
raw_data = [' hello ', 'World', '', ' PYTHON ', ' ', 'data']
# 清洗:去除空白、转为小写、过滤空字符串
cleaned = [item.strip().lower()
for item in raw_data
if item.strip()]
print(cleaned) # ['hello', 'world', 'python', 'data']
案例2:文件处理
# 假设有一个文件内容
lines = [
'Name: Zhang San',
'Age: 25',
'# This is a comment',
'Score: 85',
'',
'Name: Li Si',
'Score: 92'
]
# 提取所有数值
import re
values = [line.split(': ')[1]
for line in lines
if ':' in line and not line.startswith('#')]
print(values) # ['Zhang San', '25', '85', 'Li Si', '92']
# 只提取数字
numbers = [int(line.split(': ')[1])
for line in lines
if line.startswith(('Age', 'Score'))]
print(numbers) # [25, 85, 92]
案例3:数据转换和映射
# 温度转换
celsius = [0, 10, 20, 30, 40]
fahrenheit = [(c * 9/5) + 32 for c in celsius]
print(fahrenheit) # [32.0, 50.0, 68.0, 86.0, 104.0]
# 字典键值对转换
student_scores = {'张三': 85, '李四': 92, '王五': 78}
# 获取高分学生
high_scorers = [name for name, score in student_scores.items() if score >= 80]
print(high_scorers) # ['张三', '李四']
案例4:条件替换
# 列表元素替换
numbers = [1, 2, 3, 4, 5, 6]
# 大于3的替换为"大",否则替换为"小"
result = ['大' if x > 3 else '小' for x in numbers]
print(result) # ['小', '小', '小', '大', '大', '大']
# 复杂的条件替换
scores = [85, 92, 78, 95, 60]
grades = ['A' if s >= 90
else 'B' if s >= 80
else 'C' if s >= 70
else 'D'
for s in scores]
print(grades) # ['B', 'A', 'C', 'A', 'D']
性能优化技巧
# 1. 避免过多的嵌套,考虑可读性
# 不好的写法
result = [f(x) for x in list1 for y in list2 if condition(x, y) if condition2(x)]
# 好的写法
result = []
for x in list1:
for y in list2:
if condition(x, y) and condition2(x):
result.append(f(x))
# 2. 使用生成器表达式节省内存(大数据集)
# 列表推导式(占用内存)
big_list = [x**2 for x in range(1000000)]
# 生成器表达式(按需生成)
big_generator = (x**2 for x in range(1000000))
# 使用时逐个取值
first_100 = [next(big_generator) for _ in range(100)]
练习题
# 练习1:找出列表中所有偶数的平方
numbers = list(range(1, 11))
even_squares = [x**2 for x in numbers if x % 2 == 0]
print(f"偶数平方: {even_squares}") # [4, 16, 36, 64, 100]
# 练习2:从字符串列表中提取所有电话号码
data = ['张三: 13800138000', '李四: 你好', '王五: 13912345678']
phones = [item.split(': ')[1]
for item in data
if item.split(': ')[1].isdigit()]
print(f"电话号码: {phones}") # ['13800138000', '13912345678']
列表推导式取值的关键点:
- 基本语法:
[表达式 for 变量 in 可迭代对象] - 条件筛选:添加
if条件 - 嵌套处理:使用多个
for子句 - 条件替换:使用三元运算符
- 性能考虑:大数据量时考虑生成器
掌握这些技巧,能让你的Python代码更加简洁高效!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播