python 链表推导式_08--Python 函数式编程与推导式

@Author : Roger TX (425144880@qq.com)

一、函数式编程

1、匿名函数lambda

python 使用 lambda 来创建匿名函数。所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

lambda parameter_list: expression

parameter_list:表示参数列表

expression:表示函数表达式(不是语句)

不是所有的函数表达式都可以使用lambda

2、三元表达式

三元运算符是软件编程中的一个固定格式,语法是 条件表达式?表达式1:表达式2。使用这个算法可以使调用数据时逐级筛选。三元表达式是将编程的过程用一个表达式展现的例子。

例如:x,y判断,如果x大于y返回x,否则返回y

x > y ? x : y

Python 的三元表达式,语法格式为:表达式1 if 条件表达式 else 表达式2

x if x>y else y

3、map类

map是 Python 内置的高阶函数,参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

map(func, *iterables) --> map object

map和lambda结合可以简化代码

list_x = [1,2,3,4,5]

def square(x):

return x * x

r = map(square, list_x)

r = map(lambda x : x * x, list_x)

print (list(r))

map可以传入一个或多个序列

list_x = [1,2,3,4,5]

list_y = [1,2,3,4,5]

r = map(lambda x, y: x * x + y, list_x, list_y)

需要注意的是:map返回的是一个map对象,需要 list(map(funitor)) 来将映射之后的map对象转换成列表

4、reduce函数

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

reduce(func, sequence, initial=None) --> value

function -- 函数,有两个参数

iterable -- 可迭代对象

initializer -- 可选,初始参数

from functools import reduce

list_x = [1,2,3,4,5]

r = reduce(lambda x, y: x * x + y, list_x)

需要注意的是:reduce返回的是一个值,并且reduce需要引用 functools 包

5、filter 类

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

filter(function or None, iterable) --> filter object

function -- 函数,有两个参数

iterable -- 可迭代对象

list_x = [1,0,1,0,1]

r = filter(lambda x: True if x ==1 else False, list_x)

print (list(r))

list_x = ['A','b','f','D']

r = filter(lambda x : True if x == x.upper() else False, list_x)

print (list(r))

需要注意的是:filter返回的是一个filter对象,需要 list(filter(funitor)) 来将映射之后的filter对象转换成列表

二、Python的推导式

推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体, 共有三种推导。

列表(list)推导式

字典(dict)推导式

集合(set)推导式

1、列表推导式

列表推导能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形。

[表达式 for 变量 in 列表 if 条件]

基本格式

variable = [out_exp_res for out_exp ininput_list if condition]

out_exp_res: 列表生成元素表达式,可以是有返回值的函数。

for out_exp ininput_list: 迭代 input_list 将 out_exp 传入 out_exp_res 表达式中。

if condition: 根据条件过滤哪些值可以(可选参数)。

#找出质数

#一般方法

compositeNumber = []

num = []

#合数一般都是2-7的倍数

for i in range(2,8):

#4是最小的合数,找出50以内的所有合数

for j in range(2*i, 50, i):

compositeNumber.append(j)

for x in range(3,50):

if x not in compositeNumber:

num.append(x)

print('2-50内的质数:',num)

#用推导

compositeNumber = [j for i in range(2,8) for j in range(i*2,50,i)]

num = [x for x in range(3,50) if x not in compositeNumber]

print('2-50内的质数(推导):',num)

#列表推导之间的嵌套

num = [x for x in range(3,50) if x not in [j for i in range(2,8) for j in range(i*2,50,i)]]

print('2-50内的质数(嵌套列表推导):',num)

2、元组就没有推导式,但是可以得到生成器

tuple = (i for i in range(30) if i % 3 is 0)

print(type(tuple))

# Output:

3、字典推导式

字典和集合推导式是上面思想的延续,语法差不多,只不过产生的是集合和字典而已。

{表达式 for 变量 in 列表 if 条件}

基本格式

variable = {key_expr: value_expr for value in collection if condition}

key_expr: value_expr: 字典生成表达式,可以是有返回值的函数。

for value in collection: 迭代 collection 将 value 传入 key_expr: value_expr 表达式中。

if condition: 根据条件过滤哪些值可以(可选参数)。

#字符串生成字典:

str = 'sderfsdffsdfdsa'

#用普通方式

index = 0

for x in str:

print(index,':',x,end=',')

index+=1

print()

#用字典推导式

dictionary = {key : val for key,val in enumerate(str)}

print(dictionary)

#用enumrate遍历

for index,value in enumerate(str):

print(index,':',value,end=',')

#快速更换key和value

mcase = {'a': 10, 'b': 34}

mcase_frequency = {v: k for k, v in mcase.items()}

print mcase_frequency

# Output: {10: 'a', 34: 'b'}

4、集合推导式

集合推导式跟列表推导式非常相似,唯一区别在于用{}代替[]。

{表达式 for 变量 in 列表 if 条件}

基本格式

variable = { expr for value in collection if condition}

expr: 集合生成元素表达式,可以是有返回值的函数。

for value incollection: 迭代 collection 将 value 传入 expr 表达式中。

if condition: 根据条件过滤哪些值可以(可选参数)。

#用集合推导建字符串长度的集合

strings = ['a','is','with','if','file','exception']

print({len(s) for s in strings})

#有长度相同的会只留一个,结果{1, 2, 4, 9}

5、Python enumerate用法

enumerate()是python的内置函数

enumerate在字典上是枚举、列举的意思

对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值

enumerate多用于在for循环中得到计数

enumerate(sequence, [start=0])

for i, season in enumerate([’Spring’, ’Summer’, ’Fall’, ’Winter’]):

...

print i, season

0 Spring

1 Summer

2 Fall

3 Winter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值