map
函数的基本语法是map(func, seq)
, 其含义指的是:对后面可迭代序列中的每个元素执行前面的函数func
的功能,最终获取到一个新的序列。
Python2
中直接返回的是一个列表
Python3
中返回的是一个迭代器。
map(abs, [1, -2, 3, -4])
# 返回的结果:<map object at 0x0000021C34D48A48>
# 可以使用list方法展开
list(map(abs, [1, -2, 3, -4]))
# 返回的结果:[1, 2, 3, 4]
def func(x):
return x**2+2*x+1
result = map(func, [1, -2, 3, -4])
print(result) # [4, 1, 16, 9]
使用匿名函数的时候可以有多个参数
list(map(lambda x: x+2, [1, 2, 3, 4]))
# 返回的结果:[3, 4, 5, 6]
list(map(lambda x,y: x+y, [1, 3, 5], [5, 3, 1]))
# 返回的结果:[6, 6, 6]
list(map(lambda x,y,z: x+y+z, [1,3,5], [5,3,1], [7,8,9]))
# 返回的结果:[13, 14, 15]
reduce
函数的定义:
reduce(function, sequence [, initial]) -> value
reduce
依次从sequence
中取一个元素,和上一次调用function
的结果做参数,再次调用function
。
第一次调用function时,如果提供initial参数,会以sequence中的第一个元素和initial作为参数调用function,否则会以序列sequence的第一个数
Python3
中已将reduce
函数移到functools
模块中,需要先进行导入:
from functools import reduce
# 计算 ((((1+1)+2)+3)+4)
reduce(lambda x,y: x+y, [1,2,3,4], 1)
# >>> 11
# 计算 ((((1+2)+3)+4)
reduce(lambda x,y: x+y, [1,2,3,4])
# >>> 10
def add(x, y):
return x+y
reduce(add, [1, -2, 3 ,-4]) # (((1+-2)+3)+-4)
# -2
reduce(lambda x, y: x*y, [1,2,3,4]) # (((1*2)*3)*4)
# 24
reduce(lambda x,y: x*y+1, [1,2,3,4]) # (((1*2+1)*3+1)*4+1)
# 41
初始化值和序列中的第一个值执行func函数,将得到的结果作为下次的起始值
reduce(lambda x,y: x+y, [1,2,3,4], 6) # ((((6+1)+2)+3)+4)
# 16
filter()
函数用于过滤序列,过滤掉不符合条件的那些元素,返回符合条件的元素组成新列表。
序列中的每个元素作为参数传递给函数进行判断,返回True
或者False
,最后将返回True
的元素放到新列表中。
filter()
语法如下:
filter(function, iterable) # 前者为函数, 后者为待执行的序列
def filterFunc(x):
return x % 2 == 0
filter(filterFunc, list(range(10)))
list(filter(lambda x: x%2 == 0, list(range(10))))
list(filter(lambda x:x>0, [1,-2,4,-5,9]))
list(filter(lambda s: s=="python"), ["c/c++", "java", "python", "go"])
sorted(iterable, key=None, reverse=False)
sorted()
接受3个参数,返回的是一个排序后的列表
iterable, 可迭代对象
reverse=False, 接受一个布尔值,选择是否反转排序结果,默认是False
key=None, 接受一个回调函数,根据函数的返回值进行排序
sorted([1,4,9,2,7])
# >>> [1, 2, 4, 7, 9]
dic = {'name': 'august', 'address': 'New York', 'age', 18}
sorted(dic.keys())
# >>> ['address', 'age', 'name']
sorted(range(5), reverse=True)
# >>> [4, 3, 2, 1, 0]
key
参数的作用是我们自定义一个函数,然后通过将序列中的元素作用于函数之后再进行排序
sorted([1, -4 , 9, -2, 7], key=lambda x: abs(x))
list1 = [('python', 1), ('java', 4), ('c#', 10), ('Go', 2)]
sorted(list1, key = lambda list1:list1[0])
# >>> [('Go', 2), ('c#', 10), ('java', 4), ('python', 1)]
sort()
方法只能对原列表list进行排序,参数和sorted是相同的
结果是将原来的列表直接原地修改,而sorted是生成新的列表,两者是不同的
zip()
是Python
中一个非常重要的方法,能够快速的实现很多功能
zip([iterable, ...]) # iterable是一个或是多个可迭代对象
函数执行的结果在Python3中返回的是一个zip对象,如果需要展示成列表的形式,直接使用list方法展开;展开的结果是列表中嵌套元组的形式
在Python2中直接返回的是元组列表
形式
zip
中可以接受列表、元组、字符串、字典
等序列。
# 接受列表
li = [1, 2, 3]
result = list(zip(li))
print(result) # >>> [(1,), (2,), (3,)]
# 接受元组
tup = (1, 2, 3)
result = list(zip(li))
print(result) # >>> [(1,), (2,), (3,)]
# 接受字符串
strings = 'a string'
result = list(zip(strings))
print(result) # >>> [('a',), (' ',), ('s',), ('t',), ('r',), ('i',), ('n',), ('g',)]
# 接受字典
dic = {'name': 'august', 'age': 22, 'address': 'Beijing, China'}
result = list(zip(dic))
print(result) # >>> [('name',), ('age',), ('address',)]
# 接受range()
result = list(zip(range(1, 4)))
print(result) # >>> [(1,), (2,), (3,)]
生成的结果都是列表中嵌套元组,元组中一个元素的后面要有逗号
zip
也可接受空列表的形式,返回的扔为空列表
li = []
result = list(zip(li))
print(result) # >>> []
两个相同长度的序列
a = [1, 2, 3]
b = [4, 5, 6]
result = list(zip(a, b))
print(result) # >>> [(1, 4), (2, 5), (3, 6)]
strings = '123'
dic = {'name': 'august', 'age': 22, 'address': 'Beijing, China'}
result = list(zip(strings, dic))
print(result) # >>> [('1', 'name'), ('2', 'age'), ('3', 'address')]
当多个序列同时存在,取长度最小的那个序列的长度
a = [1, 2, 3, 4, 5]
b = ('a', 'b', 'c', 'd')
c = {'name':'august', 'age': 22, 'address': 'Beijing China'}
result = list(zip(a, b, c))
print(result) # >>> [(1, 'a', 'name'), (2, 'b', 'age'), (3, 'c', 'address')]
我们一般认为该方法是zip
的反过程,是一个unzip
的过程
a = [1,2,3]
b = [4,5,6]
zip_result = list(zip(a,b)) # >>> [(1, 4), (2, 5), (3, 6)]
unzip_result = list(zip(*zip_result)) # >>> [(1, 2, 3), (4, 5, 6)]
x = [4,5,6]
res = zip(*[x]*3)
print(list(res)) # >>> [(4, 4, 4), (5, 5, 5), (6, 6, 6)]
x
本身就是一个列表,所以[x]
就是列表嵌套了一个列表
[x]*3
的结果为[x,x,x].实际上就是[[4,5,6],[4,5,6],[4,5,6]]
*[x,x,x]
的结果就为[(4, 4, 4), (5, 5, 5), (6, 6, 6)]
x = [1,3,5]
y = [2,4,6]
z = []
for a, b in zip(x,y):
z.append(a+b)
print(z) # >>> [3, 7, 11]
a = ['username', 'passwd', 'cap_code']
b = ['august', 'august_is_best', 'abcd']
c = []
for x, y in zip(a, b):
c.append(x + ":" + y)
print(c) # >>> ['username:august', 'passwd:august_is_best', 'cap_code:abcd']
基于Nginx+Supervisord+uWSGI+Django1.11.1+Python3.6.5构建