Python之路-day6

所谓高阶函数,简单点说就是将一个函数作为另一个函数的传入参数,这样我们就称这个组合函数为高阶函数。

举个例子:

map()函数能接收两个参数,一个为函数,一个为Interable。

函数f(x)=x*3,运用此函数将列表[1,2,3,4,5,6]中的元素扩大3倍。

#高阶函数

deff(x):

returnx*3

y =map(f,[1,2,3,4,5,6])

print(list(y))

输出是:

[3, 6, 9, 12, 15, 18]

如果不使用“list()”,会怎样呢?

#高阶函数

deff(x):

returnx*3

y =map(f,[1,2,3,4,5,6])

print(y)

输出:

解释:因为map()传出的结果是Iterator,要将惰性序列用list()进行转化。

运用map()可以构造更复杂的函数。

举个例子:

ruduce()把一个函数“依次”作用在一个列表中的元素上,reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

计算一个数列的和:

#函数ruduce()的用法

fromfunctoolsimportreduce

defadd(x,y):

returnx + y

z = reduce(add,[1,3,5,7,9])

print(z)

练习1:

数据处理,利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。

输入:['adam', 'SUXIAOZHUA', 'iT']

输出:['Adam', 'Suxiaozhua', 'It']

#将用户输入的字符改为首字母大写,其他小写

defnormalize(name):

x = name.capitalize()

returnx

L1 = ['adam','SUXIAOZHUA','iT']

L2 =list(map(normalize,L1))

print(L2)

输出确认:

['Adam', 'Suxiaozhua', 'It']

练习2:

求一个数列的积:

#编写一个prod()函数,可以接受一个list并利用reduce()求积

fromfunctoolsimportreduce

defprod(L):

defmul(x,y):

returnx*y

returnreduce(mul,L)

print('3 * 5 * 7 * 9 =',prod([3,5,7,9]))

输出:

3 * 5 * 7 * 9 = 945

利用filter()函数进行列表数据的筛选:

从自然数中选出素数,使用埃拉托色尼筛选法(the Sieve of Eratosthenes)——简称埃氏筛法,是古希腊数学家埃拉托色尼(Eratosthenes 274B.C.~194B.C.)提出的一种筛选法。 是针对自然数列中的自然数而实施的,用于求一定范围内的质数,它的容斥原理之完备性条件是p=H~。

步骤:

(1)先把1删除(现今数学界1既不是质数也不是合数)

(2)读取队列中当前最小的数2,然后把2的倍数删去

(3)读取队列中当前最小的数3,然后把3的倍数删去

(4)读取队列中当前最小的数5,然后把5的倍数删去

(5)如上所述直到需求的范围内所有的数均删除或读取

#自然数中的素数筛选器

def_odd_iter():

n =1

while True:

n = n +2

yieldn

def_not_divisible(n):

return lambdax: x % n >

defprimes():

yield2

it = _odd_iter()# 初始序列

while True:

n =next(it)# 返回序列的第一个数

yieldn

it =filter(_not_divisible(n),it)# 构造新序列

# 打印1000以内的素数:

forninprimes():

ifn

print(n)

else:

break

练习:

筛选出200以内的回数——回数是从左往右读和从右往左读都一样的数。

#筛选出200以内的回数

defis_palindrome(n):

returnn==int(str(n)[::-1])

print(list(filter(is_palindrome,range(1,200))))

输出结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]

使用sorted()函数对list进行排序:

假设我们用一组tuple表示学生名字和成绩:L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]

分别按照学生名字和成绩进行排序练习

defby_name(t):

returnt[].lower()

defby_score(t):

returnt[-1]

L = [('Bob',75),('Adam',92),('Bart',66),('Lisa',88),('at',20)]

L1 =sorted(L,key=by_name)

L2 =sorted(L,key=by_score)

print(L1)

print(L2)

输出:

[('Adam', 92), ('at', 20), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]

[('at', 20), ('Bart', 66), ('Bob', 75), ('Lisa', 88), ('Adam', 92)]

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171227G0ECAR00?refer=cp_1026

同媒体快讯

扫码关注云+社区