Python3-推导式

Python3-推导式

  • 推导式(又称解析式)提供了一种简明扼要的方法来创建列表、字典、集合,适用于列表、字典、集合等可迭代数据结构(iterables)。
  • 它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。
  • 执行顺序是依次往后执行(for-->for/if-->for/if......)

一、列表推导式

1、只有一个for循环
l = [1, 2, 3, 4, 5]
ls = [x * 2 for x in l]
# 执行结果:[2, 4, 6, 8, 10]
# 执行顺序:
for x in l:
    x * 2
2、带if判断
ls = [x * 2 for x in l if x > 3]
# 执行结果:[8, 10]
# 执行顺序:
for x in l:
    if x > 3:
        x * 2
3、多个for
ls = [x * y for x in l for y in range(5)]
# 执行结果:[0, 1, 2, 3, 4, 0, 2, 4, 6, 8, 0, 3, 6, 9, 12, 0, 4, 8, 12, 16, 0, 5, 10, 15, 20]
# 执行顺序:
for x in l:
    for y in range(5):
        x * y
4、多个for和一个if判断
ls = [x * y for x in l for y in range(5) if x > 3]
# 执行结果:[0, 4, 8, 12, 16, 0, 5, 10, 15, 20]
# 执行顺序:
for x in l:
    for y in range(5):
        if x > 3:
            x * y
5、多个for多个if
ls = [x * y for x in l for y in range(5) if x > 3 if y > 3]
# 执行结果:[16, 20]
# 执行顺序:
for x in l:
    for y in range(5):
        if x > 3:
            if y > 3:
                x * y
从for循环演变成列表推导式
for循环:
ls = []
for n in range(1, 5):
    for m in range(1, n + 1):
        ls.append(n * m)
# [1, 2, 4, 3, 6, 9, 4, 8, 12, 16]
列表推导式:
ls = [n * m for n in range(1, 5) for m in range(1, n + 1)]
# [1, 2, 4, 3, 6, 9, 4, 8, 12, 16]

二、字典推导式

把一个字典的key和value互换:
dict1 = {'s1': 'a ', 's2': 'b', 's3': 'c'}
changed = {value: key for key, value in dict1.items()}
print(changed)
# =======运行结果
# {'a ': 's1', 'b': 's2', 'c': 's3'}

三、集合推导式

跟列表推导式不同的是列表是[],集合是{},集合中不允许有重复数据

# 集合推导式
s = {x**2 for x in [1, 1, 2]}
print(s) # {1, 4}
print(type(s)) # <class 'set'>

# 列表推导式
s1 = [x ** 2 for x in [1, 1, 2]]
print(s1) # [1, 1, 4]
print(type(s1)) # <class 'list'>
以上就是推导式的简单使用,推导式简单的说就是把普通的多行for循环压缩成一行代码,这种压缩语法适用于列表、字典、集合等可迭代数据结构(iterables)。

【完】


Python生成器推导式是一种创建生成器的简洁方式,它结合了列表推导式的简洁语法和生成器的延迟计算特性,避免一次性生成所有结果,从而节省内存。 ### 使用方法 生成器推导式的语法与列表推导式相似,但使用圆括号而不是方括号。基本形式为: ```python (expression for item in iterable if condition) ``` - `expression` 是对每个元素进行的操作或计算。 - `item` 是迭代过程中的每个元素。 - `iterable` 是可迭代对象,如列表、元组、字符串等。 - `if condition` 是可选的过滤条件,用于筛选元素。 以下是一个简单的示例: ```python # 创建一个生成器推导式 gen = (i * 2 for i in range(5)) # 迭代生成器 for num in gen: print(num) ``` 在这个示例中,`(i * 2 for i in range(5))` 创建了一个生成器,它会在每次迭代时生成一个值,即 `range(5)` 中每个元素的两倍。 ### 原理 生成器推导式基于生成器的原理工作。生成器是一种特殊的迭代器,它采用延迟计算(也称为惰性求值)的方式。这意味着生成器不会一次性生成所有的值,而是在需要时才生成下一个值。 当创建一个生成器推导式时,Python 不会立即计算表达式并生成所有结果,而是返回一个生成器对象。每次调用 `next()` 函数或使用 `for` 循环迭代生成器时,生成器会计算并返回下一个值。这种方式避免了一次性将所有结果存储在内存中,对于处理大量数据或无限序列非常有用。 以下是一个使用 `next()` 函数手动迭代生成器的示例: ```python gen = (i * 2 for i in range(3)) print(next(gen)) # 输出 0 print(next(gen)) # 输出 2 print(next(gen)) # 输出 4 ``` 当生成器耗尽(即没有更多的值可生成)时,再次调用 `next()` 函数会引发 `StopIteration` 异常。 综上所述,Python 生成器推导式提供了一种简洁且高效的方式来创建生成器,通过延迟计算节省内存,适用于处理大规模数据或需要逐个生成值的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值