专栏首页编程Python之路-day6

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)]

本文来自企鹅号 - 终身学习者的自习室媒体

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 轻松学习Python:基础知识汇总

    Python基础01 Hello World! Python命令行 假设你已经安装好了Python, 那么在命令提示符输入: python 将直接进入pytho...

    企鹅号小编
  • 轻松学Python,一篇文章带你快速入门

    Python基础01 Hello World! ? Python命令行 假设你已经安装好了Python, 那么在命令提示符输入: python 将直接进入pyt...

    企鹅号小编
  • Kotlin学习之高阶函数和Lambda表达式的基础用法

    Kotlin学习之高阶函数和Lambda表达式的基础用法 一、定义和调用高阶函数的写法 kotlin.collections._Arrays.kt中的mapTo...

    企鹅号小编
  • 学Python,从列表推导到zip()函数,这五种技巧应知应会

    机器之心已经介绍过很多 Python 教程,从非常齐备的长教程:一文掌握 Python 关键代码,到一些好玩的小技巧:Python 技巧 101,它们从不同的层...

    机器之心
  • Python3.6学习笔记(二)

    对于指定索引范围取值的操作,Python提供了slice方法,类似于Excel中数据透视表的切片器。

    大江小浪
  • 学Python,从列表推导到zip()函数,这五种技巧应知应会!

    最开始学 Python 时,如果我能掌握这些方法,那么代码看起来会更加优美。在本文中,作者介绍了 5 种方法,也许在入门阶段时,我们还不太了解它们,但在实战中这...

    1480
  • 学Python,从列表推导到zip()函数,这五种技巧应知应会

    在本文中,作者介绍了 5 种方法,也许在入门阶段时,我们还不太了解它们,但在实战中这 5 个技巧非常实用。

    CDA数据分析师
  • [快学Python3]Number(数字)

    概述 Python数值数据类型用于存储数值,并有一系列对应的函数用于处理数值类型的数据。 在Python中支持三种不同类型的数值类型: 整型(int) 通常称为...

    苦叶子
  • Parity多重签名合约Delegatecall漏洞回顾

    2017年7月19日,Parity Multisig 电子钱包合约被爆出漏洞,攻击者从三个高安全的多重签名合约中窃取到超过15万以太坊(约3000万美元)。

    FB客服
  • Python 切片与迭代

    切片是 python 中截取列表、元组或字符串中部分元素的快捷方法,使用 [] 来实现。

    keinYe

扫码关注云+社区

领取腾讯云代金券