Python中的解析式

本文详细探讨了Python中的解析式,包括列表解析式、集合解析式、字典解析式,以及生成器表达式。通过这些语法糖,程序员可以更高效地编写简洁的代码,减少不必要的代码量。例如,列表解析式使用for循环和可选的if条件生成新列表,而生成器表达式则提供了一种创建惰性求值序列的方式。
摘要由CSDN通过智能技术生成

这篇文章主要介绍Python中的两个非常好用的语法糖,解析式 和 生成器,如果运用熟练的话,可以极大的减少代码的书写量

列表解析式

语法:

  1. [返回值 for 元素 in 可迭代对象 if 条件]
  2. 使用中括号[],内部是for循环,if条件语句可选
  3. 返回一个新的列表

其实语法很简单,主要看例子来了解如何书写一些解析式

例子1:生成一个列表,元素0~9,对每一个元素自增1后求平方返回新列表
如果按照常规的for..in语句的话,它是这样的
>>> l1 = list(range(10))
>>> l2 = []
>>> for i in l1:
		l2.append((i+1)**2) 
>>> print(l2)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但是如果换成 解析式来写的话,代码回极大化的减少,它看起来是这样的
>>> l1 = list(range(10))
>>> l2 = [(i+1)**2 for i in l1]
>>> print(l2)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

怎么理解呢?你可以这样想,首先,按照语法规则,表达式是[]加内层套for..in的结构是一种解析式, [(i+1)**2 for i in l1] 这种解析分两步,第一步,for i in l1,做for..in遍历,把得到的每一个 i 值,传递给表达式 (i+1)**2,然后生成的数据,再加入 [] 列表结构中,最后把 [] 列表赋值给 l2

再看一个例子
例子2:获取10以内的偶数
首先常规for..in写法:
>>> even = []
>>> for x in range(10):
		if x % 2 == 0:		
			even.append(x)

解析式写法
>>> even = [x for x in range(10) if x % 2 == 0]
这种例子呢,是带条件判断的解析式,我们也来拆,首先把 for x in range(10) if x % 2 == 0 拆出来,其实这就是一个判断偶数的for..in循环 类似于常规的写法:
			for x in range(10):
				 if x % 2 == 0
只不过  for x in range(10) if x % 2 == 0 表达式会把,满足条件的 x 逐个返回,所以:
>>> even = [x for x in range(10) if x % 2 == 0]	
>>> even
[0, 2, 4, 6, 8]

多条件判断的解析式: [expr for item in iterable if cond1 if cond2]
例子3:20以内,既能被2整除又能被3整除的数
>>> ret = [i for i in range(20) if i%2==0 and i%3==0]
或者
>>> ret = [i for i in range(20) if i%2==0 if i%3==0]

双层for..in 语句的解析式:[expr for i in iterable1 for j in iterable2 ]
例: [(x, y) for x in 'abcde' for y in range(3)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值