Python学习:推导式、迭代器、生成器

Python 关键字end

在Python中,​end​是print()函数的一个关键字参数,用于指定打印内容结束时的结尾字符,默认为换行符 ​\n​。通过设置 ​end​参数,可以改变打印内容结束时的结尾字符,比如可以使用空格将内容连接在一起而不换行。

Python 推导式

在这里插入图片描述

Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。

Python 支持各种数据结构的推导式:

  • 列表(list)推导式
  • 字典(dict)推导式
  • 集合(set)推导式
  • 元组(tuple)推导式

列表(list)推导式

在Python中,列表推导式(List Comprehension)是一种非常强大且简洁的语法,用于快速创建新的列表。通过列表推导式,可以使用一种更紧凑的方式便捷地对现有列表进行转换、筛选以及操作。

下面是一个简单的示例来说明列表推导式的用法:

  1. 创建一个包含1到10的平方的列表:
squares = [x**2 for x in range(1, 11)]
print(squares)
  1. 筛选出一个列表中大于5的数,并将其存储在新的列表中:
original_list = [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
filtered_list = [x for x in original_list if x > 5]
print(filtered_list)
  1. 将一个字符串列表中的字符串都转换为大写:
words = ["hello", "world", "python"]
capitalized_words = [word.upper() for word in words]
print(capitalized_words)

可以看到使用列表推导式可以使代码更加简洁和易读。列表推导式还支持更复杂的操作,比如嵌套、多个条件筛选等。

字典(dict)推导式

在Python中,除了列表推导式,还有字典推导式(Dictionary Comprehension),用于快速创建新的字典。字典推导式的语法与列表推导式类似,但是需要同时指定键和值。

下面是一个简单的示例来说明字典推导式的用法:

  1. 创建一个包含1到5的数的平方作为键值对的字典:
square_dict = {x: x**2 for x in range(1, 6)}
print(square_dict)
  1. 筛选一个字典中值大于5的键值对:
original_dict = {'a': 3, 'b': 6, 'c': 9, 'd': 2, 'e': 7}
filtered_dict = {key: value for key, value in original_dict.items() if value > 5}
print(filtered_dict)
  1. 将一个字典中的键值对位置颠倒:
sample_dict = {'apple': 1, 'banana': 2, 'cherry': 3}
flipped_dict = {value: key for key, value in sample_dict.items()}
print(flipped_dict)

集合(set)推导式

在Python中,集合推导式(Set Comprehension)是一种类似于列表推导式和字典推导式的语法结构,用于快速创建新的集合。集合推导式的语法与列表推导式类似,但使用大括号{}来表示集合。

下面是一个简单的示例来说明集合推导式的用法:

  1. 创建一个包含1到5的平方的集合:
square_set = {x**2 for x in range(1, 6)}
print(square_set)
  1. 筛选一个集合中大于等于3且小于等于7的数:
original_set = {1, 2, 3, 4, 5, 6, 7, 8, 9}
filtered_set = {x for x in original_set if x >= 3 and x <= 7}
print(filtered_set)

元组(tuple)推导式

在Python中,元组(Tuple)是一个不可变的有序集合,不支持推导式(Comprehensions)。元组一旦创建后,就无法改变其内容或大小。

如果想要创建元组,通常可以使用逗号分隔不同的值,例如:

my_tuple = (1, 2, 3, 4, 5)

虽然元组没有推导式的直接支持,但你可以通过其他方式来创建元组,比如通过将生成的列表转换为元组。例如,利用生成器表达式(Generator Expression)可以生成一个元组:

my_tuple = tuple(x**2 for x in range(1, 6))
print(my_tuple)

Python 迭代器

在这里插入图片描述

在Python中,迭代器(Iterator)是一种对象,它实现了迭代协议,即包含__iter__()__next__()方法。迭代器用于遍历集合中的元素,可以逐个访问集合中的元素而无需知道集合的内部结构。

下面是一个简单的迭代器示例,以理解迭代器的工作原理:

# 创建一个自定义迭代器
class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration
        value = self.data[self.index]
        self.index += 1
        return value

# 使用自定义迭代器遍历列表
my_list = [1, 2, 3, 4, 5]
my_iterator = MyIterator(my_list)

for item in my_iterator:
    print(item)

在这个例子中,MyIterator类定义了一个简单的迭代器,用于遍历传入的数据。 __iter__()方法返回迭代器本身,并在__next__()方法中定义了迭代的逻辑。当迭代完成时,抛出StopIteration异常。我们使用该自定义迭代器遍历了一个列表。

此外,在Python中还有内置的iter()函数和next()函数,用于分别获取可迭代对象的迭代器以及获取下一个元素。例如:

my_list = [1, 2, 3, 4, 5]
my_iter = iter(my_list)

print(next(my_iter))
print(next(my_iter))
print(next(my_iter))
print(next(my_iter))
print(next(my_iter))

这段代码将依次输出1、2、3、4、5。

Python 生成器

在Python中,生成器(Generator)是一种特殊的迭代器,它使用了yield关键字来实现惰性求值(Lazy Evaluation)。生成器能够动态地生成值,而不需要提前将所有值存储在内存中,这对于处理大型数据集尤为有用。
在这里插入图片描述

下面是一个简单的生成器示例来说明生成器的工作原理:

# 创建一个简单的生成器函数
def my_generator():
    yield 1
    yield 2
    yield 3

# 调用生成器函数并迭代输出值
gen = my_generator()
print(next(gen))  # 输出1
print(next(gen))  # 输出2
print(next(gen))  # 输出3

# 使用for循环遍历生成器
for value in my_generator():
    print(value)

在这个例子中,my_generator()是一个生成器函数,使用yield关键字来产生值。每次调用next()函数时,生成器会执行直到遇到yield语句,然后暂停并返回一个值。在上述示例中,通过调用next()函数或者使用for循环,我们可以逐个获取生成器生成的值。

除了使用生成器函数,还可以使用生成器表达式(Generator Expression)创建生成器。示例如下所示:

# 使用生成器表达式创建生成器
gen = (x**2 for x in range(1, 4))

# 遍历生成器并输出值
for value in gen:
    print(value)

通过生成器表达式,我们可以直接在代码中定义生成器,而无需显式编写生成器函数。

生成器在处理大型数据集合、惰性计算、节省内存等方面具有重要的应用价值。希望以上示例可以帮助你更好地理解生成器及其用法。

关注我,不迷路,共学习,同进步

关注我,不迷路,共学习,同进步

在这里插入图片描述

相关推荐

  1. Python基础学习(9)/生成器

    2024-03-29 18:12:06       42 阅读
  2. Python学习之-生成器

    2024-03-29 18:12:06       30 阅读
  3. Python学习4---生成器的区别

    2024-03-29 18:12:06       29 阅读
  4. python生成器

    2024-03-29 18:12:06       35 阅读
  5. Python

    2024-03-29 18:12:06       36 阅读
  6. Python

    2024-03-29 18:12:06       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 18:12:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 18:12:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 18:12:06       87 阅读
  4. Python语言-面向对象

    2024-03-29 18:12:06       96 阅读

热门阅读

  1. 【C++】动态内存分配 与 对象的动态建立与释放

    2024-03-29 18:12:06       48 阅读
  2. LeetCode 21

    2024-03-29 18:12:06       43 阅读
  3. Leetcoder Day43| 单调栈1

    2024-03-29 18:12:06       36 阅读
  4. TCP建立连接时,为什么每次的SYN都不一样

    2024-03-29 18:12:06       43 阅读
  5. Qwen1.5模型微调部署全过程

    2024-03-29 18:12:06       36 阅读
  6. 【无标题】

    2024-03-29 18:12:06       33 阅读
  7. AI大模型学习:AI大模型在特定领域的应用

    2024-03-29 18:12:06       41 阅读
  8. HDU水题刷题记录

    2024-03-29 18:12:06       49 阅读
  9. C#WPF将变量或自定义数据类绑定到控件实例

    2024-03-29 18:12:06       39 阅读
  10. vue做一个锁屏禁止页面前进后退

    2024-03-29 18:12:06       45 阅读