复杂过滤策略
高级列表推导式技术
列表推导式能够处理简单条件之外的复杂过滤和转换策略,实现强大的数据操作技术。
条件转换
## 基于条件的动态转换
numbers = range(10)
transformed = [x**2 if x % 2 == 0 else x**3 for x in numbers]
print(transformed)
## 输出: [0, 1, 4, 27, 16, 125, 36, 343, 64, 729]
嵌套数据结构过滤
## 对嵌套字典进行复杂过滤
products = [
{'name': '笔记本电脑', 'price': 1000, 'category': '电子产品'},
{'name': '书籍', 'price': 20, 'category': '文学'},
{'name': '智能手机', 'price': 500, 'category': '电子产品'}
]
昂贵的电子产品 = [
product['name']
for product in products
if product['category'] == '电子产品'
if product['price'] > 200
]
print(昂贵的电子产品) ## 输出: ['笔记本电脑', '智能手机']
使用自定义函数进行过滤
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
质数 = [x for x in range(50) if is_prime(x)]
print(质数)
策略比较
flowchart TD
A[过滤策略] --> B[简单条件]
A --> C[嵌套条件]
A --> D[基于函数的过滤]
A --> E[条件转换]
性能和复杂度分析
策略 |
可读性 |
性能 |
复杂度 |
简单条件 |
高 |
最佳 |
低 |
嵌套条件 |
中 |
良好 |
中 |
基于函数 |
低 |
可变 |
高 |
条件转换 |
中 |
良好 |
中 |
高级过滤模式
## 多维过滤
data = [
{'name': '爱丽丝', '技能': ['Python', 'SQL'], '经验': 3},
{'name': '鲍勃', '技能': ['Java', 'C++'], '经验': 5},
{'name': '查理', '技能': ['Python', 'JavaScript'], '经验': 2}
]
Python专家 = [
person['name']
for person in data
if 'Python' in person['技能']
if person['经验'] > 2
]
print(Python专家) ## 输出: ['爱丽丝']
处理复杂场景
## 组合多种过滤技术
def is_valid_score(score):
return 70 <= score <= 90
考试成绩 = [
{'学生': '爱丽丝', '分数': 85},
{'学生': '鲍勃', '分数': 65},
{'学生': '查理', '分数': 75}
]
合格学生 = [
result['学生']
for result in 考试成绩
if is_valid_score(result['分数'])
]
print(合格学生) ## 输出: ['爱丽丝', '查理']
最佳实践
- 优先考虑可读性
- 将复杂逻辑拆分为单独的函数
- 使用列表推导式进行清晰、简洁的转换
- 对于大型数据集考虑使用生成器表达式
LabEx建议掌握这些高级过滤策略,以编写更高效、更具表现力的Python代码。