Python学习,这些高阶函数和高级特性值得一学!

简介: Python语言这么火,不论是对于刚开始学习的编程小白或者有接触过其他语言(c/c++/java等等)的同学来说,写代码的时候难免会受本身惯性思维或者其他语言的影响!解决问题的思路有的时候会比较单一,其实Python有很多灵活的解法,比如python的几个高阶函数或者特性!推导式列表推导式,使用一句表达式构造一个新列表,可包含过滤、转换等操作。

Python语言这么火,不论是对于刚开始学习的编程小白或者有接触过其他语言(c/c++/java等等)的同学来说,写代码的时候难免会受本身惯性思维或者其他语言的影响!解决问题的思路有的时候会比较单一,其实Python有很多灵活的解法,比如python的几个高阶函数或者特性!

推导式

  • 列表推导式,使用一句表达式构造一个新列表,可包含过滤、转换等操作。

语法:[exp for item in collection if codition]

例子:1-1000内所有偶数组成的列表

2种方法,大家自己对比

#one
res = []
for i in range(1,1001):
    if i%2==0:
        res.append(i)
print(res)

#two

print([i for i in range(1,1001) if i%2==0])
  • 字典推导式,使用一句表达式构造一个新列表,可包含过滤、转换等操作。

语法:{key_exp:value_exp for item in collection if codition}

print({key:value for key,value in enumerate(reversed(range(10)))})
#{0: 9, 1: 8, 2: 7, 3: 6, 4: 5, 5: 4, 6: 3, 7: 2, 8: 1, 9: 0}
  • ​集合推导式

语法:{exp for item in collection if codition}

set = {i for i in range(10)}#结果{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

map函数

map(fun, lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表返回

lis = [i**2 for i in range(10)]
print(lis) #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
print(list(map(float,lis))) #[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
print(list(map(str,lis))) #[‘0’, ‘1’, ‘4’, ‘9’, ‘16’, ‘25’, ‘36’, ‘49’, ‘64’, ‘81’]

规范字符串

name = [‘gOd’,’zIp’,’NAMe’,’titLE’,’filter’]
print(list(map(str.title,name))) #[‘God’, ‘Zip’, ‘Name’, ‘Title’, ‘Filter’] 

filter函数

  • 筛选序列
  • filter(func, lst),将func作用于lst的每个元素,然后根据返回值是True或False判断是保留还是丢弃该元素。

lis = range(-10,10)
print(list(lis)) #[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
def fun(x):
return x<0
print(list(filter(fun,lis))) #[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1]

zip函数

zip([iterable, …])

用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

lis_a = [‘a’,’b’,’c’]
lis_b = [‘aa’,’bb’,’cc’]
lis_c = [‘a’,’b’,’c’,’d’]
lis_ab = list(zip(lis_a,lis_b))
lis_bc = list(zip(lis_b,lis_c))
print(lis_ab) #[(‘a’, ‘aa’), (‘b’, ‘bb’), (‘c’, ‘cc’)]
print(lis_bc) #[(‘aa’, ‘a’), (‘bb’, ‘b’), (‘cc’, ‘c’)]
print(list(zip(*lis_bc))) #[(‘aa’, ‘bb’, ‘cc’), (‘a’, ‘b’, ‘c’)]

几个zip技巧

列表元素依次连接

lis = [i for i in range(10)]
print(list(zip(lis[1:],lis[:-1])))

zip生成字典

print(dict(zip(‘abcd’,’1234’)))

对应列表元素相加

lis1 = [i for i in range(5)]
lis2 = [i*2 for i in range(6)]
lis3 = [i**2 for i in range(5)]
lis = []
for x,y,z in zip(lis1,lis2,lis3):
lis.append(x+y+z)
print(lis)

列表元素依次连接
[(1, 0), (2, 1), (3, 2), (4, 3), (5, 4), (6, 5), (7, 6), (8, 7), (9, 8)]

zip生成字典
{'a': '1', 'b': '2', 'c': '3', 'd': '4'}

对应列表元素相加
[0, 4, 10, 18, 28]

zip是一个非常重要的函数,非常方便.熟悉掌握zip帮我们大幅的减少函数的代码和复杂度,并且提高效率!

最后

其实Python的技巧非常非常多,大家平时的写代码或者读代码的时候要注意收集,特别是有一些精妙的招数,一时半会无法领悟,可以记下来,慢慢思考,总有一天会对你的功力增长大有裨益.

还是那句话,代码一定要多练习才能掌握!大家加油!

相关文章
|
8天前
|
Python
python函数的参数学习
学习Python函数参数涉及五个方面:1) 位置参数按顺序传递,如`func(1, 2, 3)`;2) 关键字参数通过名称传值,如`func(a=1, b=2, c=3)`;3) 默认参数设定默认值,如`func(a, b, c=0)`;4) 可变参数用*和**接收任意数量的位置和关键字参数,如`func(1, 2, 3, a=4, b=5, c=6)`;5) 参数组合结合不同类型的参数,如`func(1, 2, 3, a=4, b=5, c=6)`。
13 1
|
4天前
|
Python
python学习3-选择结构、bool值、pass语句
python学习3-选择结构、bool值、pass语句
|
1天前
|
Serverless 开发者 Python
《Python 简易速速上手小册》第3章:Python 的函数和模块(2024 最新版)
《Python 简易速速上手小册》第3章:Python 的函数和模块(2024 最新版)
25 1
|
1天前
|
索引 Python
Python高维变量选择:SCAD平滑剪切绝对偏差惩罚、Lasso惩罚函数比较
Python高维变量选择:SCAD平滑剪切绝对偏差惩罚、Lasso惩罚函数比较
|
2天前
|
机器学习/深度学习 算法 Python
使用Python实现集成学习算法:Bagging与Boosting
使用Python实现集成学习算法:Bagging与Boosting
15 0
|
3天前
|
Python
python学习-函数模块,数据结构,字符串和列表(下)
python学习-函数模块,数据结构,字符串和列表
25 0
|
3天前
05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域
05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域
|
4天前
|
Python
python学习14-模块与包
python学习14-模块与包
|
4天前
|
Python
python学习12-类对象和实例对象
python学习12-类对象和实例对象
|
4天前
|
数据采集 Python
python学习9-字符串
python学习9-字符串