文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-11-29 19:06

关注

基本的条件表达式

首先,让我们回顾一下基本的条件表达式——三元运算符。在 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)  # 输出:良好

这里,我们使用了两层嵌套的条件表达式。如果 score 大于等于 90,则 grade 为 “优秀”;否则再判断 score 是否大于等于 80,如果是,则 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]

这里,我们使用列表推导式来遍历 numbers 列表,并通过条件 num % 2 == 0 来筛选出所有偶数。

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

类似地,我们也可以使用字典推导式来进行条件判断。

示例 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': '及格'}

这里,我们使用字典推导式来遍历 students 字典,并通过条件表达式来生成一个新的字典 grades。

使用 lambda 函数进行条件判断

除了列表推导式和字典推导式,我们还可以使用 lambda 函数来简化条件判断。

示例 5:

假设我们需要一个函数来判断一个数是否为正数,并返回相应的信息:

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

这里,我们定义了一个 lambda 函数 is_positive,它接受一个参数 x 并返回相应的判断结果。

使用 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]

这里,我们先使用 filter() 函数筛选出所有的正数,然后使用 map() 函数计算它们的平方。

使用 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]

这里,我们首先生成一个选择器列表 selectors,用于判断哪些数是奇数。然后使用 itertools.compress() 函数来筛选出奇数,并计算它们的立方。

实战案例:学生信息处理

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

假设我们有一个学生信息列表,每个学生的信息包括姓名、成绩和班级。我们需要根据成绩生成学生的等级,并按班级进行分组。

数据准备:

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, 等级: 良好
来源:PythonAI与图像处理内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯