忽略掉例行寒暄,让查老四直接讲课了
- 列表推导式(List Comprehension)
列表推导式是一种简洁的构建列表的方法。它可以将一个循环和条件表达式结合起来,从而生成一个新的列表。
示例:
# 普通循环创建一个列表
squares = []
for x in range(1, 6):
squares.append(x ** 2)
print(squares) # 输出: [1, 4, 9, 16, 25]
# 使用列表推导式创建同样的列表
squares_lc = [x ** 2 for x in range(1, 6)]
print(squares_lc) # 输出: [1, 4, 9, 16, 25]
练习题:使用列表推导式创建一个包含1到20之间所有奇数的列表。
- 生成器(Generator)
生成器是一种特殊的迭代器,可以使用简单的语法创建,用于按需生成数据,而不是一次性生成所有数据。生成器可以节省内存,特别适合处理大量数据。要创建一个生成器,只需将列表推导式中的方括号[]
替换为圆括号()
。
示例:
# 创建一个生成器,生成1到5之间的平方数
squares_gen = (x ** 2 for x in range(1, 6))
# 使用for循环遍历生成器
for square in squares_gen:
print(square, end=" ") # 输出: 1 4 9 16 25
练习题:创建一个生成器,生成1到20之间的奇数。
- 迭代器(iterator)
迭代器是一个可以遍历容器(如列表、元组、字典等)中所有元素的对象。在Python中,迭代器实现了两个关键的方法:__iter__()
和 __next__()
。
__iter__()
方法返回迭代器对象本身。__next__()
方法返回容器中的下一个值。当没有更多的元素时,__next__()
方法会抛出 StopIteration
异常。
我们可以通过调用内置函数 iter()
从可迭代对象(如列表、元组、字典等)中创建迭代器。接着使用内置函数 next()
从迭代器中获取下一个元素。
下面是一个关于迭代器的简单示例:
# 示例:创建一个迭代器
my_list = [1, 2, 3, 4]
iterator = iter(my_list)
# 使用 next() 函数获取迭代器中的下一个元素
print(next(iterator)) # 输出: 1
print(next(iterator)) # 输出: 2
接下来,我给出一个关于自定义迭代器的示例,以便您更好地理解迭代器的工作原理。
# 示例:自定义迭代器
class MyNumbers:
def __init__(self):
self.current_num = 0
def __iter__(self):
return self
def __next__(self):
if self.current_num <= 5:
current = self.current_num
self.current_num += 1
return current
else:
raise StopIteration
# 创建 MyNumbers 类的实例
my_numbers = MyNumbers()
# 创建迭代器
iterator = iter(my_numbers)
# 使用 for 循环遍历迭代器中的元素
for num in iterator:
print(num) # 输出:0 1 2 3 4 5
练习题:实现一个自定义迭代器,使其生成前 10 个斐波那契数列的数。
在实现过程中,如果有任何问题,请随时提问。
老猫:列表推导式 生成器 迭代器各自的适用场景是什么
查老四:列表推导式、生成器和迭代器都有各自的适用场景。以下是它们的适用场景概述:
- 列表推导式(List Comprehensions): 列表推导式适用于根据简单的逻辑创建新的列表。它可以使代码更加简洁易读。但是,列表推导式会直接创建整个列表,因此当需要处理大量数据时,可能会消耗较多的内存。
适用场景:
- 快速创建列表
- 基于已有列表进行简单转换和过滤
- 生成器(Generators): 生成器适用于创建一个元素在迭代过程中按需生成的序列。生成器可以帮助您节省内存,因为它并不会一次性创建整个序列。在处理大量数据或者计算复杂的序列时,使用生成器是非常高效的。
适用场景:
- 处理大量数据
- 创建按需生成元素的序列
- 生成无法预先确定长度的序列
- 迭代器(Iterators): 迭代器适用于需要逐个访问容器(如列表、元组、字典等)元素的场景。迭代器允许您按顺序遍历容器中的元素,而不需要关心容器的内部实现。此外,自定义迭代器还可以根据特定逻辑生成元素。
适用场景:
- 遍历容器中的元素(如列表、元组、字典等)
- 自定义迭代顺序或生成特定逻辑的元素
- 实现“惰性求值”(按需计算的特性)
总的来说,列表推导式适用于创建简单的列表,生成器适用于处理大量数据并节省内存,迭代器则适用于遍历容器中的元素以及自定义迭代逻辑。在实际应用中,您可以根据不同的场景和需求选择合适的方式。
练习 1:
下面是使用列表推导式创建包含1到20之间所有奇数的列表的Python程序,代码中包含注释和格式化字符串(f-string):
# 使用列表推导式创建包含1到20之间所有奇数的列表
odd_nums = [num for num in range(1, 21) if num % 2 == 1]
# 输出结果
print(f"The odd numbers between 1 and 20 are: {odd_nums}")
输出结果为:
The odd numbers between 1 and 20 are: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
下面是使用生成器创建1到20之间的奇数的Python程序,代码中包含注释和格式化字符串(f-string):
# 使用生成器生成1到20之间的奇数
def odd_nums():
for num in range(1, 21):
if num % 2 == 1:
yield num
# 输出结果
print("The odd numbers between 1 and 20 are:")
for num in odd_nums():
print(num, end=" ")
输出结果为:
The odd numbers between 1 and 20 are:
1 3 5 7 9 11 13 15 17 19
练习3
下面是一个自定义迭代器,用于生成前 10 个斐波那契数列的数的Python程序,代码中包含注释和格式化字符串(f-string):
# 自定义迭代器,用于生成前 10 个斐波那契数列的数
class Fibonacci:
def __init__(self):
self.num1 = 0
self.num2 = 1
self.counter = 0
def __iter__(self):
return self
def __next__(self):
if self.counter >= 10:
raise StopIteration
elif self.counter == 0:
self.counter += 1
return self.num1
elif self.counter == 1:
self.counter += 1
return self.num2
else:
fib_num = self.num1 + self.num2
self.num1 = self.num2
self.num2 = fib_num
self.counter += 1
return fib_num
# 使用自定义迭代器生成前 10 个斐波那契数列的数
fibonacci = Fibonacci()
print("The first 10 numbers in the Fibonacci sequence are:")
for num in fibonacci:
print(num, end=" ")
输出结果为:
The first 10 numbers in the Fibonacci sequence are:
0 1 1 2 3 5 8 13 21 34
对了答案,基本一致
周总结和练习
老猫:这一节内容我掌握了,我们继续下一节
查老四:很好!接下来我们将对之前几天学到的知识点进行复习。
第四天:实践与复习
- 复习前三天所学的知识点
我们已经学习了Python的基本数据类型、变量、运算符、输入输出操作、条件判断、循环结构、列表、元组、字典、集合、函数及其参数传递、局部变量和全局变量的概念、列表推导式、生成器和迭代器等知识点。 - 选择一些适合初学者的编程题目,例如LeetCode或其他在线编程平台上的简单题目,进行实战练习。
以下是一些适合练习的题目:
- 统计一个字符串中每个字符出现的次数。
- 计算一个列表中的最大值、最小值和平均值。
- 对一个列表进行排序,可以尝试冒泡排序、插入排序等算法。
- 编写一个函数,实现两个数的加减乘除运算。
请尝试编写代码解决这些问题,如果遇到困难或需要帮助,请尝试编写代码解决这些问题,如果遇到困难或需要帮助,请随时向我提问,我会尽力提供帮助。
- 总结一下本周的学习收获,为接下来的学习做好准备。
回顾这一周的学习内容,思考哪些知识点掌握得较好,哪些知识点还需要进一步巩固。对于不太熟悉的内容,可以多加练习,尝试编写更多相关的代码来巩固理解。如果有需要,可以在接下来的学习过程中多花些时间来复习这些知识点。同时,也可以查阅Python官方文档或相关教程,了解更多细节。
接下来的学习阶段,我们将进入Python的高级部分,包括模块、文件操作、异常处理、面向对象编程、类和对象、继承和多态等概念。这些知识点将使您的Python编程能力更上一层楼,并为日后的项目开发和学习其他编程语言打下坚实的基础。
为了更好地准备接下来的学习,建议您定期回顾本周学到的知识点,多做练习题以及实际应用。当您遇到问题时,请不要犹豫,随时向我提问,我会尽力提供帮助
练习 1
可以使用字典来统计字符串中每个字符出现的次数,遍历字符串中的每个字符,将其作为字典中的键,并将其出现的次数作为对应键的值进行累加。例如:
string = "hello, world!"
char_count = {}
for char in string:
if char in char_count:
char_count[char] += 1
else:
char_count[char] = 1
print(char_count)
输出结果为:
{'h': 1, 'e': 1, 'l': 3, 'o': 2, ',': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1, '!': 1}
其中,字典char_count
记录了字符串中每个字符出现的次数。
练习 2
可以使用 Python 内置函数来计算列表中的最大值、最小值和平均值。例如:
numbers = [1, 5, 3, 7, 2, 8]
max_num = max(numbers)
min_num = min(numbers)
avg_num = sum(numbers) / len(numbers)
print("最大值:", max_num)
print("最小值:", min_num)
print("平均值:", avg_num)
输出结果为:
最大值: 8
最小值: 1
平均值: 4.333333333333333
其中,max()
函数返回列表numbers
中的最大值,min()
函数返回列表numbers
中的最小值,sum()
函数返回列表numbers
中所有元素的和,而len()
函数返回列表numbers
的长度(即其中元素的个数)。将这些函数的结果进行相应的运算,即可得到列表numbers
的最大值、最小值和平均值。
练习 3
好的,以下是使用冒泡排序和插入排序算法对列表进行排序的 Python 代码:
冒泡排序
def bubble_sort(lst):
"""
使用冒泡排序算法对列表进行排序
:param lst: 待排序的列表
:return: 排序后的列表
"""
n = len(lst)
for i in range(n):
# 每轮冒泡将最大值冒泡到末尾
for j in range(n-i-1):
if lst[j] > lst[j+1]:
lst[j], lst[j+1] = lst[j+1], lst[j]
return lst
使用示例
>>> lst = [3, 2, 1, 5, 4]
>>> bubble_sort(lst)
[1, 2, 3, 4, 5]
插入排序
def insertion_sort(lst):
"""
使用插入排序算法对列表进行排序
:param lst: 待排序的列表
:return: 排序后的列表
"""
n = len(lst)
for i in range(1, n):
key = lst[i]
j = i - 1
while j >= 0 and lst[j] > key:
lst[j+1] = lst[j]
j -= 1
lst[j+1] = key
return lst
使用示例
>>> lst = [3, 2, 1, 5, 4]
>>> insertion_sort(lst)
[1, 2, 3, 4, 5]
以上代码中,我们使用了两种常见的排序算法,分别是冒泡排序和插入排序。在这里,我们定义了两个函数 bubble_sort
和 insertion_sort
,它们分别使用了冒泡排序和插入排序算法来对列表进行排序。在函数定义中,我们使用了 Docstring 来对函数进行注释,这是 Python 中常用的注释方式之一。另外,在函数中我们也使用了 f-string 来方便地输出排序结果。
练习4
以下是一个 Python 函数,可以执行两个数的加减乘除运算:
def calculate(num1, num2, operator):
if operator == '+':
return num1 + num2
elif operator == '-':
return num1 - num2
elif operator == '*':
return num1 * num2
elif operator == '/':
return num1 / num2
else:
return "Invalid operator"
该函数接受三个参数:num1
和 num2
表示要进行操作的两个数字,operator
是一个字符串,表示要执行的操作符。如果 operator
不是四种支持的运算符之一,则返回一个错误消息。例如,可以使用以下方式调用该函数:
result = calculate(3, 4, '+')
print(result) # 输出 7
result = calculate(10, 5, '-')
print(result) # 输出 5
result = calculate(2, 8, '*')
print(result) # 输出 16
result = calculate(9, 3, '/')
print(result) # 输出 3.0
标签:__,迭代,Python,self,生成器,列表,lst,num,Day
From: https://blog.51cto.com/cloudzun/6162098