文末赠免费精品编程资料~~
今天的内容适合Python初学者,也包含一些让进阶者也能眼前一亮的小技巧。
第一部分:走进while循环的世界
想象一下,你正在准备一场派对,需要不断地邀请朋友直到达到预定的人数。这就像是一个while循环的过程——“持续邀请,直到满足条件”。
基础while循环
首先,让我们从基础的while循环开始。比如,我们要打印数字直到达到10。
count = 1
while count <= 10:
print(count)
count += 1
这段代码很直接:初始化count
为1,然后检查它是否小于或等于10,如果是,就打印这个数字并让count
加1。这是一个典型的计数循环。
列表推导式的魅力
列表推导式是Python中的一个强大特性,可以让你以简洁的方式创建列表。比如,创建一个包含1到10的平方的列表。
squares = [i**2 for i in range(1, 11)]
print(squares)
这段代码生成了一个列表,其中包含了1到10每个数字的平方。是不是比传统的for循环简洁多了?
轻松结合:while与列表推导的初体验
现在,让我们将while循环的持续性与列表推导式的简洁性结合起来,解决一个实际问题:假设你需要收集用户输入的数字,直到他们输入“结束”,然后返回这些数字的列表。
numbers = []
input_str = ''
while input_str != '结束':
input_str = input("请输入一个数字或输入'结束'来停止:")
if input_str.isdigit():
numbers.append(int(input_str))
print(numbers)
这里,我们使用了while循环等待用户输入,并利用条件判断来决定是否继续循环。注意,这里没有直接展示列表推导式的结合,因为我们想逐步构建复杂度。
过渡:列表推导式的条件使用
在结合之前,先看一个列表推导式中使用条件的例子,这将帮助我们理解如何在循环中添加逻辑判断。
even_numbers = [i for i in range(1, 11) if i % 2 == 0]
print(even_numbers)
这段代码创建了一个只包含偶数的列表,展示了条件表达式在列表推导式中的应用。
第二部分:高级结合实例:动态收集数据
现在,我们将之前的用户输入例子与条件列表推导式结合起来,实现一个更高级的版本:动态收集正数,直到用户决定停止,同时排除任何非正数输入。
positive_numbers = []
input_str = ''
while True:
input_str = input("请输入一个正数或输入'结束'来停止:")
if input_str.lower() == '结束':
break
elif input_str.isdigit() and int(input_str) > 0:
positive_numbers.append(int(input_str))
else:
print("无效输入,请输入正数。")
print("有效的正数列表:", positive_numbers)
这里,我们通过while循环持续接收输入,使用条件判断确保只添加正数到列表中,体现了控制流和数据处理的结合。
进阶:嵌套循环与列表推导
在处理复杂数据结构时,你可能需要嵌套循环。虽然嵌套循环在while循环中可能会变得难以管理,但结合列表推导式,事情会变得简单得多。
示例:生成一个二维数组,其中每一行是从1到n的数字序列。
rows = 4
matrix = [[j + 1 for j in range(i+1)] for i in range(rows)]
for row in matrix:
print(row)
这段代码展示了如何使用嵌套列表推导式来创建一个二维数组(矩阵),每个内部列表代表一行,且长度递增。
练习建议
练习1:斐波那契数列
利用while循环和列表推导,生成斐波那契数列的前N项。斐波那契数列是这样一个序列:0, 1, 1, 2, 3, 5, 8, …,后面的每一项是前两项之和。
- 步骤1 : 使用while循环生成斐波那契数列,直到达到指定的项数。
- 挑战 : 尝试将这个过程优化,减少循环的次数,考虑使用列表推导的特性。
提示 : 可以先用两个变量存储前两项,然后在循环中更新这两个变量,并使用列表推导来收集结果。
高级应用:生成器与无限列表
Python的生成器是一个强大的工具,特别适合处理大数据流。结合while循环,你可以创建一个无限序列生成器,这在某些数据分析和模拟场景下非常有用。
示例:无限自然数序列生成器
def infinite_sequence():
num = 1
while True:
yield num
num += 1
# 使用生成器
gen = infinite_sequence()
for _ in range(10):
print(next(gen), end=' ')
这段代码展示了如何定义一个无限生成器函数,使用yield
关键字。通过while循环,它能无限地产生自然数序列。
实战案例:数据分析入门
设想一个场景,你得到了一个包含随机数字的列表,你的任务是找出所有大于某个特定值的数字,并计算它们的平均值。
# 示例数据
data = [45, 23, 67, 89, 12, 56, 78, 34]
threshold = 50
# 使用列表推导式筛选
filtered_numbers = [num for num in data if num > threshold]
# 计算平均值
average = sum(filtered_numbers) / len(filtered_numbers) if filtered_numbers else 0
print(f"大于{threshold}的数字有:{filtered_numbers}")
print(f"这些数字的平均值是:{average}")
这段代码展示了如何结合列表推导式进行数据筛选,以及如何进行简单的数据分析计算。实战中,这种技巧非常实用,能快速处理数据集合。
结语
通过今天的深入探讨,你已经学会了如何将while循环与列表推导式巧妙结合,不仅提升了数据处理的能力,还掌握了进阶的编程技巧。
好了,今天的分享就到这里了,我们下期见。如果本文对你有帮助,请点赞、转发、点个在看吧!
文末福利
请关注下方公众号并后台回复编程资料免费获取Python编程、人工智能、爬虫等100+本精品电子书。