首页 > 编程语言 >Python-10-Python常见高级用法

Python-10-Python常见高级用法

时间:2023-08-01 15:57:19浏览次数:42  
标签:10 函数 Python reduce list 列表 用法 lambda

10-1 Lambda 匿名函数

匿名函数:没有定义函数的名称,可以实现函数某些简单的功能。格式:

lambda param_list:expression
# param_list 参数列表
# expression 简单表达式,没法实现复杂的代码块内容

需求1:传入x y,返回x+y

例子:

f = lambda x,y: x+y
f(3, 4) #7

lambda 与向量表达式和高阶表达式一起使用,也是可以实现复杂的函数体的。

#需求2:若x>y返回x+y的值,否则返回x-y的值
f = lambda x,y: x+y if x>=y else x-y #三元表达式(判断写在后面,结果写在前面)
f(5, 4) #9
f(4, 5) #-1

 

10-2 三元表达式

也即3目运算符,python中的三目运算符格式是:

<条件为真的结果> if <条件判断> else <条件为假的结果>
#需求1: 输入一个单词,如果是小写单词则返回小写单词,否则都返回大写单词。
f = lambda x: x if x.islower() else x.upper()
f('hello') #'hello'
f('Hello') #'HELLO'

 

10-3 map

高阶函数map:

map(func, *iterables)
# func 代表可接收一个函数
# iterables 代表可接收一个或多个可迭代的序列

需求1:生成一个列表b,列表b内的元素为a列表每个元素的三次方

#非高阶函数实现
a = [1, 2, 3]
b = []
for i in a:
    b.append(i**3)
b #[1, 8, 27]

#高阶函数实现
def func(x):
    return x ** 3
b = map(func, a)
b #<map at 0x22216a07340>
list(b) #[1, 8, 27]

#和lambda表达式一起使用
b = map(lambda x: x**3, a)
list(b) #[1, 8, 27]

需求2:将两个列表元素相加之后的结果存放在一个新列表c中

a = [1, 2, 3, 4, 5]
b = [1, 2, 3, 4, 5]
c = map(lambda x,y: x+y, a,b)
list(c) #[2, 4, 6, 8, 10]

a = [1, 2, 3, 4]
b = [1, 2]
c = map(lambda x,y: x+y, a,b)
list(c) #[2, 4] 若列表元素个数不同,则返回列表元素个数较少的作为结果

 

10-4 reduce

高阶函数reduce,适用场景:连续计算

from functools import reduce
reduce(function, sequence[, initial])
#function 接收一个函数
#sequence 接收一个可迭代序列
#initial 初始运算的值

例子:

from functools import reduce
a = [1, 2, 3, 4, 5]
num = reduce(lambda x,y:x*y, a) #这里需要两个参数x,y,y在列表中依次向后取,x*y作为下一次的x参与运算
num #120
num = reduce(lambda x,y:x*y, a, 1000) # 1000*1*2... 1000是个初始值
num #120000

from functools import reduce
b = ['a', 'b', 'e']
r = reduce(lambda x,y:x+y, b, '???')
r #'???abe'

 

10-5 filter

适用场景:用于序列元素过滤。要求function返回结果必须得是True或False.

filter(function, iterable)
# function 接收一个函数
# iterable 接收一个可迭代序列

例子:

# 过滤a中非0的值-非高阶
a = [0, 1, 2, 3, 4, 5]
b = []
for i in a:
    if a != 0:
        b.append(i)
b #[0, 1, 2, 3, 4, 5]

# 过滤a中非0的值-高阶
def f(x):
    if x !=0:
        return x
b = filter(f, a)
list(b) #[1, 2, 3, 4, 5]

# 过滤a中非0的值-高阶+lambda
c = filter(lambda x: True if x!=0 else False, a)
c #<filter at 0x22216a06c50>
list(c) #[1, 2, 3, 4, 5]

c = filter(lambda x:x, a) #同上,非0就是True
list(c) #[1, 2, 3, 4, 5]

 

10-6 列表推导式

基本格式:

variable = [i for i in input_list if <条件判断>]

# variable 列表名,可自定义
# i  循环变量名
# input_list 可迭代序列
# if 条件判断,如果不写的话,默认所有条件都成立

例子:

#需求1:如何快速生成一个0-9的列表
#一般实现
a = []
for i in range(9):
    a.append(i)
a #[0, 1, 2, 3, 4, 5, 6, 7, 8]

#列表推导式实现
a = [i for i in range(10)]
a #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

a = [i for i in range(10) if i > 5]
a #[6, 7, 8, 9]


#需求2:生成一个列表,列表内的元素为a列表每个元素的三次方
a= [6, 7, 8, 9]
c = [i**2 for i in a]
c #[36, 49, 64, 81]

#需求3:将字典中的键都保存到一个列表c中
d = {'lemon':10, 'apple':5, 'pear':15}
c = [i for i in d.keys()]
c #['lemon', 'apple', 'pear']

#需求4:扩展,将字典里面的键与值进行替换
d = {'lemon':10, 'apple':5, 'pear':15}
e = {value:key for key,value in d.items()} #注意这里是大括号,value:key表示键值替换
e #{10: 'lemon', 5: 'apple', 15: 'pear'}

 

标签:10,函数,Python,reduce,list,列表,用法,lambda
From: https://www.cnblogs.com/hellokitty2/p/17596711.html

相关文章

  • Python-9-Python迭代器、生成器与装饰器
    9-1迭代器在本章之前的代码,for循环本质上是迭代器的应用。迭代器,可以理解为一个容器,循环的时候,每次从容器中取出一个数据,直到数据取完为止。foriinrange(1,10):print(i,end='')#123456789如何自定义一个迭代器1.以类为例,需要在类中定义两个方法:__iter......
  • python怎么把json文件夹转成Excel表?
    1、python怎么把json文件夹转成Excel表?2、Python代码json数据再别的目录下怎么调用?3、【Python】浅谈python中的json4、python的json怎么用5、如何使用Python处理JSON数据python怎么把json文件夹转成Excel表?可以用pandas来读取json文件,再to_excel保存为Excel文件。可......
  • Python-8-Python模块
    8-1Pycharm安装 http://www.jetbrains.com/pycharm/选Download下载,下载Community社区版本,此时就已经在下载了。安装过程中勾选"64-bitlauncher","AddlauncherdirtoPATH",".py".首次启动,不安装插件,直接启动。需要添加python解释器,设置字体。8-2介绍Python项目组织......
  • Python 程序的运行原理
    1.简单的例子先从一个简单的例子说起,包含了两个文件foo.py和demo.py[foo.py]defadd(a,b):returna+b[demo.py]importfooa=[1,'python']a='astring'deffunc():a=1b=257print(a+b)prin......
  • Python 函数 类 语法糖
    Python语法糖\,换行连接Pythons=''s+='a'+'b'+'c'n=1+2+3#6while,for循环外的else如果while循环正常结束(没有break退出)就会执行else。Pythonnum=[1,2,3,4]mark=0whilemark<len(num):......
  • 在python中,title()可以用在列表中吗?
    1、python根据一个随机url链接获取该链接中的title?2、在python中,title()可以用在列表中吗?3、Python绘图如何显示中文标题4、在python中set_title的意思python根据一个随机url链接获取该链接中的title?1、这种方法为从urlparse模块中通过urlparse方法提取url通过hostnam......
  • Spring Cloud Alibaba 2022 正式发布,启动速度提升 10 倍,各方面直接起飞!
    大家好,我是栈长。经过SpringCloudAlibaba2022的第一个候选版本2022.0.0.0-RC1发布7个多月后,中间还有一个2022.0.0.0-RC2版本,就在前几天,SpringCloudAlibaba2022.0.0.0正式版终于正式发布了。SpringCloudAlibaba2022.0.0.0依赖更新由于SpringBoot各个版本......
  • Python-6-Python面向对象
    6-1面向过程与面向对象1.面向过程面向过程,核心在过程二字,面向过程设计思维,就好比精心设计一条流水线,考虑周全,相应时候处理相应问题。优点:将复杂问题流程化,进而简单化。缺点:扩展性差。若更改需求,可能整个代码都需要重写,牵一发而动全身。若解决不需要经常迭代更新的程序时,面向过......
  • win10最新版apktool 反编译
    apktool_2.6.0.jar 改成apktool.jar和apktool.bat放在同一个文件夹,并将此文件夹加入系统变量Path(D:\SoftWare\apktool)apktool.bat:@echooffsetlocalsetBASENAME=apktool_chcp650012>nul>nulsetjava_exe=java.exeifdefinedJAVA_HOME(setjava_exe="%JAVA_HOME%\b......
  • urllib3高级用法
    除了基本的HTTP请求和响应处理功能,urllib3还提供了一些高级用法,包括: 1.连接池管理:urllib3使用连接池管理HTTP连接,可以提高性能和效率。可以使用`urllib3.PoolManager`类创建连接池,例如: ``` http=urllib3.PoolManager() response=http.request('GET','http://www......