python3---六剑客

本文详细介绍了Python3中的六个核心功能:lambda函数(匿名函数)、map函数(根据指定序列做映射)、reduce函数(累积求和或计算)、filter函数(过滤序列元素)、推导列表(简洁创建列表)以及切片操作。通过实例演示了这些功能的用法,帮助读者更好地理解和运用这些Python技巧。
摘要由CSDN通过智能技术生成

目录

 

1、lambda函数(匿名函数)

2、map函数:根据指定序列做映射

3、reduce函数:

3.1、自定义函数和reduce配合使用

3.2、与lambda函数混合使用

4、filter函数

5、推导列表

6、切片


1、lambda函数(匿名函数)

python使用lambda来创建匿名函数。

  • lambda函数只是一个表达式,函数体比def简单很多
  • lambda语句被用来创建新的函数对象,并且在运行时返回他们。
  • lambda会返回一个函数对象,但这个对象不会赋给一个标识符,而def则会把函数对象赋值

给一个 变量(函数名)。

  • lambda函数拥有自己的命名空间,且不能访问自有参数列表或者全局命名空间里的参数
  • 像if或for或print等语句不能用于lambda中。

 

示例1:

>>> sum=lambda x,y:x+y
>>> print(sum(10,11))
21
>>> print(sum("hello","world"))
helloworld
>>>
>>>
>>> a=lambda x,y,z:x+y*z
>>> a(1,2,3)
7
>>>
>>> a=lambda:1
>>> a
<function <lambda> at 0x00000227F332B378>
>>> a()
1
>>>

示例2:自定义一个函数和lambda一起使用

>>> def twice(n):
...     return lambda s:s*n
...
>>> #该步的作用是t=lambda s:s*n,  且n=2
...
>>> t=twice(2)
>>> #下面是将s传递进去,s为“word”
...
>>> print(t("word"))
wordword
>>>

2、map函数:根据指定序列做映射

map函数会根据指定的序列做映射

语法

map(function,iterable,...)

  • function:函数
  • iterable:一个或者多个序列

返回值

  • Python2中返回列表
  • Python3中返回迭代器,如果想生成列表,要list()下。

示例1:用map函数求列表中各个数的二次方

>>> def square_1(x):
...     return x**2
...
>>> map(square_1,[1,2,3,4])
<map object at 0x00000227F33322E8>
>>> list(map(square_1,[1,2,3,4]))
[1, 4, 9, 16]
>>>

示例2:用map函数求2个列表中的对应位上的数值相加

>>> res=map(lambda x,y:x+y,[2,3,4],[3,4,5])
>>> print(list(res))
[5, 7, 9]
>>>

示例3:用map函数将字符串中的数字转换为数字类型,其他类型不变。

>>> def get_num(s):
...     if s>="0" and s<="9":
...         return int(s)
...     else:
...         return s
...
>>> print(list(map(get_num,"abc123")))
['a', 'b', 'c', 1, 2, 3]
>>>

解释:

map函数是将序列字符串“abc123”中的每个元素都用函数get_num进行判断,所以在get_num只要就是用于判断序列中每个元素需要满足的要求就行。

3、reduce函数:

3.1、自定义函数和reduce配合使用

语法

reduce(function,iterable[,initializer])
  • function:函数,有2个参数
  • iterable:可迭代对象
  • initializer:可选,初始参数

注意事项:

1、在python2中reduce()函数可以直接使用,但是在python3中,reduce()需要引入模块:functools

示例1:

>>> from functools import reduce
>>>
>>> def add(a,b):
...     return a+b
...
>>> reduce(add,[3,4,5,6,7])
25
>>>

 

思路解析:

前两个数值相加:

3+4=7

和7与第三个值相加:

7+5=12

和12和第4个数值相加

12+6=18

和18与第5个值相加

18+7=25

 

3.2、与lambda函数混合使用

注意事项:

reduce中,函数必须是2个参数,不能是1个,否则会报错。

示例1:

>>> reduce(lambda x:x*2,[1,2,3,4])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes 1 positional argument but 2 were given
>>>

示例2:统计某个字符串中某个字符的重复次数。

>>> from functools import reduce
>>> sentence="i am a boy,i have a ball"
>>> print(reduce(lambda a,x:a+x.count("a"),sentence,0))
5
>>>

4、filter函数

filter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元组组成的列表。

该函数接受两个参数,第一个为函数,第二个为序列,序列的每个元素传给函数进行判断,返回True和False,最后将True的元素放在列表中。

注意:python3中返回的是迭代器,如果需要,可以转换为列表。

示例1:返回列表中的奇数或者偶数

>>> def is_odd(n):
...     if n%2==1:
...         return n
...
>>> print(list(filter(is_odd,(1,2,3,4,5,6,7))))
[1, 3, 5, 7]
>>> print(list(filter(lambda x:x%2==0,(2,3,4,5,6,7,8,9,10))))
[2, 4, 6, 8, 10]
>>>

5、推导列表

列表推导式提供了一种简明扼要的方法来创建列表。

习题1:使用列表推导式实现嵌套列表的平铺。

>>> s=[[1,2,3],[4,5,6],[7,8,9]]
>>> print([k for i in s for k in i])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>

习题2:使用推导列表过滤掉不符合条件的元素

>>> m
[0, 2, 3, 4, -1, -4, -2, -5, 9]
>>> print([num for num in m if num>0] )
[2, 3, 4, 9]
>>>

习题3:在列表推导式中使用多个循环,实现多序列元素任意组合

>>> [(x,y) for x in range(5) for y in range(10) if y>4]
[(0, 5), (0, 6), (0, 7), (0, 8), (0, 9), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9)]
>>>

习题4、使用推导列表列出100以内的所有的素数。

>>> import math
>>> math.sqrt(100)
10.0
>>> [n for n in range(2,100) if 0 not in [n%d for d in range(2,int(math.sqrt(n))+1)]]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
>>>

6、切片

python中的有序序列都可以进行切片操作,例如:列表、元组、字符串

语法:

序列[start:end:step]

  • start:起始索引,从0开始,-1结束
  • end:结束索引
  • step:步长
  • end-start:当为正数时,从左向右取值,当为负数时,反向取值。
  • 切片结果不包含结束索引,不包含最后一位。
  • >>> list1=[1,2,3,4,5,6,7]
    >>> list2=list1[:]
    >>> list2
    [1, 2, 3, 4, 5, 6, 7]
    >>> list3=list1[::1]
    >>> list3
    [1, 2, 3, 4, 5, 6, 7]
    >>> list4=list1[2:6:2]
    >>> list4
    [3, 5]
    >>> list5=list1[:-1:1]
    >>> list5
    [1, 2, 3, 4, 5, 6]
    >>> list6=list1[-4:-1:2]
    >>> list6
    [4, 6]
    >>> list7=list1[-1:0:1]
    >>> list7
    []
    >>> list8=list1[-1:0:-1]
    >>> list8
    [7, 6, 5, 4, 3, 2]
    >>>

     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值