编程 一行代码搞定复杂条件表达式判断

2024-11-18 22:03:28 +0800 CST views 485

一行代码搞定复杂条件表达式判断

一、引言

在 Python 编程中,条件判断是必不可少的一部分。通常我们会使用 if 语句来实现逻辑判断。但有时候,简单的 if 语句可能显得冗长且不够优雅。今天,我们就来聊聊如何用一行代码搞定复杂的条件表达式判断。

二、基本的条件表达式

首先,让我们回顾一下基本的条件表达式——三元运算符。在 Python 中,我们可以用下面的形式来表示:

result = value_if_true if condition else value_if_false

这段代码的意思是:如果 condition 条件为真,则 result 的值为 value_if_true;否则为 value_if_false

示例 1

假设我们要根据一个人的年龄来判断他是否成年:

age = 20
is_adult = "成年人" if age >= 18 else "未成年人"
print(is_adult)  # 输出:成年人

三、嵌套条件表达式

有时候,我们的需求不仅仅是简单的二选一,而是需要多重条件判断。这时,我们可以将多个条件表达式嵌套起来使用。

示例 2

假设我们要根据一个人的成绩来评定他的等级:

score = 85
grade = "优秀" if score >= 90 else ("良好" if score >= 80 else "及格")
print(grade)  # 输出:良好

这里使用了嵌套的条件表达式,实现了多重判断。

四、使用列表推导式进行条件判断

我们还可以利用列表推导式来进行条件判断,特别适合从列表中筛选特定条件的元素。

示例 3

假设我们要从一个列表中筛选出所有偶数:

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = [num for num in numbers if num % 2 == 0]
print(even_numbers)  # 输出:[2, 4, 6]

五、使用字典推导式进行条件判断

类似地,字典推导式可以帮助我们在生成字典时同时进行条件判断。

示例 4

根据学生的成绩生成一个等级字典:

students = {"Alice": 85, "Bob": 92, "Charlie": 78}
grades = {name: "优秀" if score >= 90 else ("良好" if score >= 80 else "及格") for name, score in students.items()}
print(grades)  # 输出:{'Alice': '良好', 'Bob': '优秀', 'Charlie': '及格'}

六、使用 lambda 函数进行条件判断

我们还可以使用 lambda 函数 来简化条件判断的逻辑。

示例 5

定义一个 lambda 函数来判断一个数是否为正数:

is_positive = lambda x: "正数" if x > 0 else "非正数"
print(is_positive(5))  # 输出:正数
print(is_positive(-3))  # 输出:非正数

七、使用 map() 和 filter() 进行条件判断

通过 map()filter(),我们可以实现更复杂的条件组合和数据处理。

示例 6

筛选出列表中的所有正数,并计算它们的平方:

numbers = [-5, 3, 7, -2, 8, 0]
positive_squares = list(map(lambda x: x ** 2, filter(lambda x: x > 0, numbers)))
print(positive_squares)  # 输出:[9, 49, 64]

八、使用 itertools.compress() 进行条件判断

对于更复杂的条件组合,可以使用 itertools.compress() 函数来实现。

示例 7

筛选出所有奇数,并计算它们的立方:

import itertools

numbers = [-5, 3, 7, -2, 8, 0]
selectors = [True if num % 2 != 0 else False for num in numbers]
odd_cubes = list(itertools.compress([num ** 3 for num in numbers], selectors))
print(odd_cubes)  # 输出:[-125, 27, 343]

九、实战案例:学生信息处理

现在,我们来看一个实际的应用案例:处理学生信息并根据成绩生成等级。

数据准备:

students = [
    {"name": "Alice", "score": 85, "class": "A"},
    {"name": "Bob", "score": 92, "class": "B"},
    {"name": "Charlie", "score": 78, "class": "A"},
    {"name": "David", "score": 88, "class": "B"},
    {"name": "Eva", "score": 91, "class": "A"}
]

解决方案:

# 定义一个函数来生成等级
def get_grade(score):
    return "优秀" if score >= 90 else ("良好" if score >= 80 else "及格")

# 使用列表推导式生成新的学生信息列表,包含等级
students_with_grades = [
    {**student, "grade": get_grade(student["score"])} for student in students
]

# 按班级分组
from collections import defaultdict

grouped_students = defaultdict(list)
for student in students_with_grades:
    grouped_students[student["class"]].append(student)

# 打印结果
for class_name, class_students in grouped_students.items():
    print(f"班级 {class_name}:")
    for student in class_students:
        print(f"  姓名: {student['name']}, 成绩: {student['score']}, 等级: {student['grade']}")

输出结果

班级 A:
  姓名: Alice, 成绩: 85, 等级: 良好
  姓名: Charlie, 成绩: 78, 等级: 及格
  姓名: Eva, 成绩: 91, 等级: 优秀
班级 B:
  姓名: Bob, 成绩: 92, 等级: 优秀
  姓名: David, 成绩: 88, 等级: 良好
复制全文 生成海报 Python编程 条件表达式 数据处理

推荐文章

nginx反向代理
2024-11-18 20:44:14 +0800 CST
介绍Vue3的静态提升是什么?
2024-11-18 10:25:10 +0800 CST
Vue3中怎样处理组件引用?
2024-11-18 23:17:15 +0800 CST
liunx宝塔php7.3安装mongodb扩展
2024-11-17 11:56:14 +0800 CST
55个常用的JavaScript代码段
2024-11-18 22:38:45 +0800 CST
38个实用的JavaScript技巧
2024-11-19 07:42:44 +0800 CST
前端开发中常用的设计模式
2024-11-19 07:38:07 +0800 CST
HTML和CSS创建的弹性菜单
2024-11-19 10:09:04 +0800 CST
Vue中的样式绑定是如何实现的?
2024-11-18 10:52:14 +0800 CST
底部导航栏
2024-11-19 01:12:32 +0800 CST
批量导入scv数据库
2024-11-17 05:07:51 +0800 CST
Gin 与 Layui 分页 HTML 生成工具
2024-11-19 09:20:21 +0800 CST
mysql 优化指南
2024-11-18 21:01:24 +0800 CST
html流光登陆页面
2024-11-18 15:36:18 +0800 CST
MySQL 日志详解
2024-11-19 02:17:30 +0800 CST
pin.gl是基于WebRTC的屏幕共享工具
2024-11-19 06:38:05 +0800 CST
Vue3中的v-bind指令有什么新特性?
2024-11-18 14:58:47 +0800 CST
Grid布局的简洁性和高效性
2024-11-18 03:48:02 +0800 CST
XSS攻击是什么?
2024-11-19 02:10:07 +0800 CST
Rust 并发执行异步操作
2024-11-18 13:32:18 +0800 CST
程序员茄子在线接单