def printline(content,sign):
"""
打印一条分割线
:param content: 分割线中你想要填写的内容 格式:例如:------ 解压 --------
:param sign: 用什么符号分割 “-”、“*”。。。
:return:
"""
print('{}'.format(sign)*50,end='')
print(content,end='')
print('{}'.format(sign)*50)
"""
map :map(函数,可迭代数据,可迭代数据,可迭代数据,''')
: 最主要的作用是并行,以及zip就是用来进行并发运算的、迭代等;
map会 根据指定的函数对指定迭代器进行映射;
map中指定函数的参数个数,与后面的集合数必须对应,但是集合中的个数可以不同
"""
printline('map','-')
def addnum(a, b, c, d):
return a + b * c * d
ret = map(addnum, [1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [5, 4, 3, 2, 1], (0, 0, 0, 0, 1))
for i in ret:
print(i) # 1 2 3 4 5 6
def func(x, y):
return x, y
ret = map(func, [1, 2, 3], [1, 2, 4, 5]) # 当个数不匹配时返回 在对应位置返回空值
print(list(ret)) # [(1, 1), (2, 2), (3, 4)]
ret = map(lambda x: x ** 2, [2, 3, 4])
print(list(ret)) # [4, 9, 16]
ret = map(lambda x, y, z: x + y + z, [2, 3, 4], [3, 4, 5], [4, 5, 6])
print(list(ret)) # [9, 12, 15]
"""
****************** reduce() **********************
"""
printline('reduce','*')
from functools import reduce
def func(a, b):
return a + b
ret = reduce(func, [1, 2, 3, 4, 5]) # 15
print(ret)
"""
reduce(函数,可迭代数据,初始值(initial)),在python3之后就不是内置函数了需要导入
过程:
1、取 1、2 ,传进函数, 得到返回值 3 ;
2、取 3、3 ,传进函数, 得到返回值 6 ;
1、取 6、4 ,传进函数, 得到返回值 10 ;
1、取 10、5 ,传进函数, 得到返回值 15 ;
也就是:从左到右对一个序列的项累计地应用有两个参数的函数,以此合并序列到一个单一值。
"""
# 进阶 将一个列表拼成一个整数
ret = reduce(lambda x, y: x * 10 + y, [1, 2, 3, 4, 5])
print(ret) # 12345
# 再进阶
person = (
{'name': 'zhangsan', 'age': 21},
{'name': 'lisi', 'age': 51},
{'name': 'wangwu', 'age': 71},
{'name': 'liuliu', 'age': 121},
)
'''
#这部分代码会出错,报错内容:TypeError: 'int' object is not subscriptable
def func(p1,p2):
ret = p1['age']+p2['age']
return ret
ret = reduce(func,person)
print(ret)
原因:
在第一执行的时候,p1={'name': 'zhangsan', 'age': 21},,p2= {'name': 'lisi', 'age': 51}
p1['age'] = 21 , p2['age'] = 51 返回:72
第二次执行的时候 func函数中第一个参数p1成了 72,是一个整数,它就没有['age']这个键了就会报错
'''
# 所以在此我们要设立一个初始值0,这样p1就一直是一个整数了,就不影响执行了
def func(p1,p2):
ret = p1+p2['age']
return ret
ret = reduce(func,person,0)
print(ret) #264
"""
zip(): zip(iterable1,iterable2,iterable3,iterable4''')
将可迭代函数作为参数,对应元素打包成一个元组,并组成一个对象。如果要迭代的个数一样,
返回长度与最短可迭代对象相等,返回值是zip类型数据
"""
printline('压缩','-')
a = [1,2,3,4]
b = ['a,','b','c','d']
c = [6,7,8,9,10]
zip1 = zip(a,b)
print(list(zip1),type(zip1)) #[(1, 'a,'), (2, 'b'), (3, 'c'), (4, 'd')] <class 'zip'>
zip2 = zip(a,c)
print(list(zip2)) #[(1, 6), (2, 7), (3, 8), (4, 9)] 按短的来
zip3 = zip(a,b,c)
print(list(zip3)) # [(1, 'a,', 6), (2, 'b', 7), (3, 'c', 8), (4, 'd', 9)]
zip4 = zip(zip1,zip2)
print(list(zip4)) # 将两个zip对象zip,结果是空
# 解压 *zip( zip 对象)
printline('解压','-')
zip5 = zip(a,b)
print(list(zip5)) # 压缩 [(1, 'a,'), (2, 'b'), (3, 'c'), (4, 'd')]
zip_jie = zip(*zip(a,b)) # 解压
print(list(zip_jie)) #[(1, 2, 3, 4), ('a,', 'b', 'c', 'd')]
print(list(zip(zip(*zip(a,b))))) # [((1, 2, 3, 4),), (('a,', 'b', 'c', 'd'),)]
# zip 对象是一个迭代器
printline('zip迭代器','+')
a_b = zip(a,b)
for i in a_b:
print(i) #(1, 'a,') 、(2, 'b')、(3, 'c')、(4, 'd')
print(list(a_b)) # []