Python小技巧之列表推导式到匿名函数

Python小技巧之列表推导式到匿名函数

最近又看了一遍python的基础知识,所谓温故而知新,哈哈哈,所以在这里写下自己的一些见解,我觉得在实战过程中还是非常有用的一些小技巧,也分享给大家,如果写的不好,请大家留言或者私信我,一起学习一下!
下面进入正题:

列表推导式

个人觉得列表推导式非常强大,在实战中也经常用到

所谓列表推导式就是使用列表结合for循环快速创建一个新的列表,列表推导式返回的是一个列表类型

Python在执行列表推导式时,会对可迭代对象 L 进行迭代,将每一次迭代的值赋给循环变量 x ,然后收集变量表达式 x ** 2 的计算结果,最终由这些结果构成了新的列表,也就是列表推导式所返回的值。
只要支持 for 循环进行迭代的对象,都可以对它使用列表推导式。

举例(找出列表中所有’a’的元素,并添加到新列表)

list = ['a','b','a','d','e','a','g']
result = []
for i in list:
	if i == 'a':
		result.append(i)
print(result)

结果

['a', 'a', 'a']

那么有了列表推导式,我们可以改写成

print([i for i in list if i  == 'a'])

结果

['a', 'a', 'a']

如果我们列表中的元素还需要做其他运算,比如:

def add(parms):
	res = ''.join(parms + 'pple')
	return res

再结合上面的列表推导式

print([add(i) for i in list if i  == 'a'])

结果

扫描二维码关注公众号,回复: 10302402 查看本文章
['apple', 'apple', 'apple']

列表推导式的一般语法可以表示为 [ expression for item in list ],如果你希望加上一些布尔型条件语句,那么上面的语法可以修改为 [ expression for item in list if conditional ] 或者

[
expression for x in X [if condition]
for y in Y [if condition]

for n in N [if condition]
]
举例(为了方便好看,写成下面格式)

print(
	[
		(x, y, z) for x in range(6) if x % 3 == 0 
				 for y in range(6) if y % 3 == 1 
				 for z in range(6) if z % 2 ==1
	])

结果

[(0, 1, 1), (0, 1, 3), (0, 1, 5), (0, 4, 1), (0, 4, 3), (0, 4, 5), (3, 1, 1), (3, 1, 3), (3, 1, 5), (3, 4, 1), (3, 4, 3), (3, 4, 5)]

Lambda 和 Map

Lambda 是一种匿名函数,也非常好用的,它不需要定义函数名,可以做最直观的运算
还是以上面的例子为例

def add(parms):
	res = ''.join(parms + 'pple')
	return res

直接写成

add = (lambda parms: ''.join(parms+ 'pple'))
print(add('a'))

结果

apple

那么我们为什么要用上面的表达式?很大一部分原因在于,当我们想执行一些简单运算时,可以不需要定义真实函数就能完成。例如排序列表元素,一种直观的方法可以使用 sorted() 方法:

print(sorted([0, -3, 3, -2, 2], key=lambda x: x ** 2, reverse=True))

结果

[-3, 3, -2, 2, 0]

上面就是根据每个元素的二次方进行从大到小的排列

Map 是一个简单的函数,属于python的内置函数,它可以将某个函数应用到其它一些序列元素,例如列表

最简单的例子

x = map(lambda x: x ** 2,[1,2,3])
print(list(x))  

结果

[1, 4, 9]

注意:map函数返回的迭代器只能迭代一次,迭代之后会自动清空

x = map(lambda x: x ** 2,[1,2,3])
print(list(x))  
print(list(x))  

结果

[1, 4, 9]
[]

上面输出了两次,第一次有数据,第二次为空,所以我们在开发过程中,将map函数返回的迭代器保存转为list,可以多次使用

x = map(lambda x: x ** 2,[1,2,3])
y = list(x)
print(y)  
print(y)  

结果

[1, 4, 9]
[1, 4, 9]

有兴趣的朋友可以看看源码

发布了3 篇原创文章 · 获赞 5 · 访问量 128

猜你喜欢

转载自blog.csdn.net/mr_zhongjie/article/details/105073187
今日推荐