彩虹然

rainbow-ran

Python3.7之内置函数

一、map()函数

map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

map(function, iterable, ...) function -- 函数 iterable -- 一个或多个序列

Python 2.x 返回列表。

Python 3.x 返回迭代器。

1、当seq只有一个时,将函数func作用于这个seq的每个元素上,并得到一个新的seq。

res = map((lambda x: x**2 if x < 3 else x**3), [1, 2, 3, 4, 5])

for i in res:
    print(i)

注:

1.map()函数不改变原有的 list,而是返回一个新的 list。

2.利用map()函数,可以把一个 list 转换为另一个 list,只需要传入转换函数。

例:假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,请利用map()函数,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的list:
输入:['adam', 'LISA', 'barT']
输出:['Adam', 'Lisa', 'Bart']

def format_name(s):
    s1 = s[0:1].upper()+s[1:].lower()
    return s1


res = map(format_name, ['adam', 'LISA', 'barT'])
for i in res:
    print(i)

2、当seq多于一个时,map可以并行(注意是并行)地对每个seq执行过程。

l2 = map(lambda x, y: x**y, [1, 2, 3], [1, 2, 3])
for i in l2:
    print(i)
'''
1
4
27
'''
l3 = map(lambda x, y: (x**y, x+y), [1, 2, 3], [1, 2, 3])
for i in l3:
    print(i)
# 打印三个元祖
'''
(1, 2)
(4, 4)
(27, 6)
'''

python3中可以处理类表长度不一致的情况,但无法处理类型不一致的情况。

l4 = map(lambda x, y: (x**y, x+y), [1, 2, 3], [1, 2])
for i in l4:
    print(i)
'''
(1, 2)
(4, 4)
'''

二、reduce()函数

用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。即reduce() 函数会对参数序列中元素进行累积。

reduce(function, iterable[, initializer])

function -- 函数,有两个参数
iterable -- 可迭代对象
initializer -- 可选,初始参数

可计算列表元素和或阶乘。

注:在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 functools 模块里,如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数:

from functools import reduce


num = [1, 2, 3, 4, 5]
print(reduce(lambda x, y: x + y, num, 1))
print(reduce(lambda x, y: x * y, num))
# 输出
'''
16
120
'''

三、filter()函数

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

filter(function, iterable)

function -- 判断函数。
iterable -- 可迭代对象。

Python 2.x 返回列表。

Python 3.x 返回迭代器。

# 过滤出列表中的所有奇数
num = [1, 2, 3, 4, 5]
newlist = filter(lambda x: x % 2 == 1, num)
for i in newlist:
    print(i, end=' ')

# 输出
'''
1 3 5 
'''

四、all()与any()

any(x)判断x对象是否为空对象,如果都为空、0、false,则返回false,如果不都为空、0、false,则返回true

all(x)如果all(x)参数x对象的所有元素不为0、' '、False或者x为空对象,则返回True,否则返回False

五、zip()函数

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。

我们可以使用 list() 转换来输出列表。

print(list(zip(('a', 'n', 'c'), (1, 2, 3))))
print(list(zip(('a', 'n', 'c'), (1, 2, 3, 4))))
print(list(zip(('a', 'n', 'c', 'd'), (1, 2, 3))))

[('a', 1), ('n', 2), ('c', 3)]
[('a', 1), ('n', 2), ('c', 3)]
[('a', 1), ('n', 2), ('c', 3)]
posted @ 2020-01-16 16:15  彩虹然  阅读(584)  评论(0编辑  收藏  举报