推导式可以说是python语法的亮点之一,写法优雅,功能强大。
1、列表推导式
使用一句表达式构造一个新列表,可包含过滤、转换等操作,当需要每次输出2个值时,需将其做为一个元组或列表。
返回简单元素:
res = [i for i in range(10)]
print(res) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
返回列表:
res = [[i,i*i] for i in range(5)]
print(res) # [[0, 0], [1, 1], [2, 4], [3, 9], [4, 16]]
返回元组:
res = [(i,i*i) for i in range(5)]
print(res)
要加else的时候,语法如下:
res = [i if i%2==0 else i*2 for i in range(10)]
print(res) # [0, 2, 2, 6, 4, 10, 6, 14, 8, 18]
嵌套循环时,语法如下:
res = [(x, y) for x in range(4) if x % 2 ==0 for y in range(5)]
print(res)
再复杂的就不建议用推导式了,就有点强行用的意思了。
2、字典推导式
data = [0,1,2]
res = {x:y for x,y in enumerate(data)}
print(res) # {0: 0, 1: 1, 2: 2}
3、集合推导式
set1 = {i for i in range(10) if i %2 ==0}
print(set1) # {0, 2, 4, 6, 8},注意集合会自动去重哦。
4、嵌套推导式
lst = [[1,2,3], [4,5,6], [7,8]]
res = [y for x in lst for y in x]
print(res) # [1, 2, 3, 4, 5, 6, 7, 8]
5、生成器
res = (x*2 for x in range(4) if x % 2 ==0)
print(res.__next__()) # 0
print(res.__next__()) # 4
# ...
python中一切皆对象,这种设计这其实模糊了很多底层概念,最明显的就是python中有引用而没有指针。
也正是这种设计才让python代码看起很优雅,衍生了不少高级用法。但其实也不完全是好事,如果写的太花里胡哨等过半年时间自己都未必能看懂为什么这么写0~0。
多函数实例:
# 假如我们要对下面字符串去除空格与$
str_lst = ['$1.123', ' $1123.454', '$899.12312']
def remove_space(str):
"""
remove space
"""
str_no_space = str.replace(' ', '')
return str_no_space
def remove_dollar(str):
"""
remove $
"""
if '$' in str:
return str.replace('$', '')
else:
return str
def clean_str_lst(str_lst, operations):
"""
deal with string list
参数1:接收要处理的列表
参数2:接收一个由函数对象组成的列表
"""
result = []
for item in str_lst:
# item被operations里的所有方法执行一遍
for op in operations:
item = op(item)
result.append(item)
return result
# 创建一个列表类型的参数对象
clean_operations = [remove_space, remove_dollar]
# 将列表对象传入
result = clean_str_lst(str_lst, clean_operations)
print(result) # ['1.123', '1123.454', '899.12312']
1、合并字典
x = {'a':1, 'b':2}
y = {'c':3, 'd':4}
z = {**x, **y}
print(z) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
由于z是个字典,里面必须接受的是key-value的形式,所以要进行拆包
* 与 ** 表示拆包,不懂的同学可以去了解一下这个知识,这里就不展开了。
2、另类拆包
a, *b = 1,2,3,4
print(a) # 1
print(b) # [2, 3, 4]
3、return多个值
python中return可以有多个值,但是内部会将它们打包成一个元组(好像ruby支持返回2个值,不知道是不是~)
def ret():
return 1,2,3
res = ret()
print(res) # (1,2,3)
4、列表合并为字符串
res = " ".join(["this", "is", "a", "demo"])
print(res) # this is a demo
注意:“ ” 之间有空格,没有的话拼出来是thisisademo
5、链式比较
a = 2
if 1 < a < 3:
print("true") # true
如果本篇文章对你有帮助,可否在文章右侧点个赞再走呢~~
本文为原创,转载请注明出处
python 如何避免大量的if else
python魔法方法(部分)
python避坑篇
python complex函数
python开发手册
python内置函数(下)
python内置属性,函数
python异常处理
python lambda函数