【python知识】推导式和生成器

目录

一、说明

二、列表生成式

2.1  语法

2.2  列表推导式实例

三、字典的推导式

3.1 语法字典推导式

 3.2 示例

四、 集合推导式

4.1 集合推导的语法

4.2 实例

五、元组推导式

5.1 元组推导式基本格式 

5.2 元组推导式示例


一、说明

        Python 推导式,是针对容器对象(列表,字典,集合,元组)的产生方式的语句。它可以从一个数据序列构建另一个新的数据序列的结构体。

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

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

二、列表生成式

        List Comprehension ,列表生成式(又称列表推导式列表解析式)提供了一种简明扼要的方法来创建列表。虽然名字叫做 List Comprehension,但是这个语法同样适用于dict、set等一系列可迭代的数据结构。

2.1  语法

        列表生成式是python为我们提供的一种简化代码的解决方案,用来快速生成列表,语法如下:

    [表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]

        此格式中,[if 条件表达式] 不是必须的,可以使用,也可以省略。

        除去 [if 条件表达式] 部分,其余各部分的含义以及执行顺序和 for 循环是完全一样的(表达式其实就是 for 循环中的循环体),即它的执行顺序如下所示:

  1. for 迭代变量 in 可迭代对象

  2. 表达式

        列表生成式与 for 循环语句最大的不同之处在于,列表推导式最终会将循环过程中,计算表达式得到的一系列值组成一个列表

2.2  列表推导式实例

        针对以下场景:

egg_list=[]
for i in range(10):
    egg_list.append('鸡蛋%s' %i)

        用列表生成式可以一行解决

    egg_list=['鸡蛋%s' %i for i in range(10)]

print(egg_list)的结果:

三、字典的推导式

        字典推导式和集合推导式一样使用花括号,区别是字典推导式同时取出键和值,中间用冒号分开。还要注意字典要使用items()函数,该函数将字典的键和值以列表方式返回。

3.1 语法字典推导式

        字典推导基本格式:

        { key_expr: value_expr for value in collection }
或

        { key_expr: value_expr for value in collection if condition }

使用字符串及其长度创建字典:

 3.2 示例

1)给定一个已知字典,挑选某些项:

dict1 = {
'name': 'Tom',
'age': 18,
'sex': 'man',
}

生成一个新的字典

formula = {key: value for key, value in dict1.items() if key == 'name'}
print(formula)

结果:运行结果:{‘name’: ‘Tom’}

2)从迭代序列生成字典

实例
>>> dic = {x: x**2 for x in (2, 4, 6)}
>>> dic
{2: 4, 4: 16, 6: 36}
>>> type(dic)
<class 'dict'>

四、 集合推导式

4.1 集合推导的语法

集合推导式基本格式:

{ expression for item in Sequence }
或
{ expression for item in Sequence if conditional }

4.2 实例

1)计算数字 1,2,3 的平方数:

>>> setnew = {i**2 for i in (1,2,3)}
>>> setnew
{1, 4, 9}

2)判断不是 abc 的字母并输出:

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'d', 'r'}
>>> type(a)
<class 'set'>

3)集合推导式使用的是花括号,用法和列表推导式一样:

  1. str1 = ['aaaa', 'bbb', 'cccc', 'ddd', 'eee', 'ffff', 'ggggg']

  2. formula = {str2 for str2 in str1 if len(str2) >= 4}

  3. print(formula)

结果:{‘ffff’, ‘cccc’, ‘aaaa’, ‘ggggg’}或{‘cccc’, ‘aaaa’, ‘ggggg’, ‘ffff’}等等。

注意:集合是一个无序不重复元素集。

五、元组推导式

        元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的元组。

5.1 元组推导式基本格式 

(expression for item in Sequence )
或
(expression for item in Sequence if conditional )

        元组推导式和列表推导式的用法也完全相同,只是元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是中括号 [],另外元组推导式返回的结果是一个生成器对象。

5.2 元组推导式示例

        例如,我们可以使用下面的代码生成一个包含数字 1~9 的元组:

>>> a = (x for x in range(1,10))
>>> a
<generator object <genexpr> at 0x7faf6ee20a50>  # 返回的是生成器对象

>>> tuple(a)       # 使用 tuple() 函数,可以直接将生成器对象转换成元组
(1, 2, 3, 4, 5, 6, 7, 8, 9)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python中的生成器(generator)是一种特殊的迭代器,可以用来逐步生成序列。与普通函数不同,生成器函数使用yield关键字来返回值,而不是return。当函数执行到yield时,函数会暂停并将yield后面的值返回给调用者,但是函数的状态仍然保留在内存中,可以再次恢复执行。 以下是一些生成器的用法: 1. 生成器表达 Python中的生成器表达与列表推导类似,但是使用圆括号而不是方括号。它可以用来生成一个序列,而不是一次性生成整个序列。 示例: ``` gen = (x * x for x in range(10)) for i in gen: print(i) ``` 2. yield语句 yield语句可以用来定义生成器函数。当函数执行到yield语句时,函数会暂停并将yield后面的值返回给调用者。函数的状态仍然保留在内存中,可以再次恢复执行。 示例: ``` def generator_func(): for i in range(10): yield i * i gen = generator_func() for i in gen: print(i) ``` 3. send方法 send方法可以在生成器函数中向生成器发送一个值,并继续执行生成器函数。这个值可以通过yield语句返回。 示例: ``` def generator_func(): while True: x = yield print(x) gen = generator_func() next(gen) gen.send(10) ``` 4. yield from语句 yield from语句可以用来在生成器函数中调用另一个生成器函数。它可以让代码更加简洁,并且能够处理嵌套生成器的情况。 示例: ``` def child_gen(): for i in range(5): yield i def parent_gen(): yield from child_gen() gen = parent_gen() for i in gen: print(i) ``` 以上是一些生成器的用法,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无水先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值