六剑客

一行搞定六剑客:三个函数:map filter reduce + lambda 切片 推导列表

python最有特点的一行代码,所有代码均可以借用一行代码(目标)

1.map(函数,列表或者字符串)#字符串或者列表中每个字符或每个元素都带入函数运算

1.map函数:

输出结果为列表

1)列表元素的map运算,

>>> map(s,[1,2,3])

[2, 3, 4]

2)字符串元素的map运算,函数用lambda实现

>>> map(lambda x:x.upper(),"abc")

['A', 'B', 'C']

3)函数自定义,应用自定义函数套用将列表或字符串中每个元素输出,

实例:自定义函数map

>>> def uppercase(s):

... if s>='A' and s<='Z':

... return s

... else:

... return ""

...

>>> print "".join(map(uppercase,"AABBabAN"))

AABBAN

实例:使用map函数,将一个字符串中的小写字母删除掉,例如:“AABBaabb”,

结果返回"AABB"

def delete_lowercase(s):

if s>='a' and s<="z":

return ""

else:

return s

print "".join(map(delete_lowercase,"AABBaabb"))

>>> "".join([i for i in map(lambda x:(re.match(r"[ACDEFGHIJKLMNOPQRSTUVWXYZ]*",x).group()),"asdASD") if i!=""])

'ASD'、

2.filter 两个参数(自定义函数名,列表)对列表中的元素过滤后输出

filter实例:

>>> def uppercase(s):

... if s>='A' and s<='Z':

... return s

... else:

... return ""

...

>>> print "".join(map(uppercase,"AABBabAN"))

AABBAN

>>> print "".join(filter(uppercase,"AABBabFN"))

AABBFN

>>>

实例:

filter(lambda x:x in string.uppercase,"AAaaSSBB")

reduce(lambda x,y:x+y,range(1,101))

3、reduce (函数名,列表)将列表中的元素逐一累计

累加

>>> print reduce(lambda x,y:x+y,range(1,101))

5050

阶乘

>>> print reduce(lambda x,y:x*y,range(1,5))

24

>>> print reduce(lambda x,y:x*y,range(1,7))

720

实例:

list_a=[1,1,1,3,5,6,8]

func=lambda x,y:x if y in x else x + [y]

print reduce(func,[[],]+list_a)

4.lambda函数,变量:运算表达式:将变量按运算表达式运算后输出

语法:变量:运算表达式 如 x:x+1

引用: 函数名(变量赋值) a(1)

>>> a=lambda x:x+1

>>> a(4)

5

>>> a=lambda x,y,z:(x+y)*z

>>> a(1,1,4)

8

>>> a=lambda x:s*x

>>> s=1

>>> a(5)

两个参数lambda函数

import string

fp = open("e:\\1.txt","w")

content=map(lambda x,y:x+","+str(y)+"\n",list(string.lowercase),range(1,27))

fp.writelines(content)

list_a=[1,1,1,3,5,6,8]

func=lambda x,y:x if y in x else x + [y]

print reduce(func,[[],]+list_a)

5.推导列表 结果表达式+范围+条件

[str(a)*i for i in range(1,times+1)]

实例:将列表中的每个元素变为重复字符串,如1 变为 a 2变为 aa 3变为aaa

a=int(raw_input("input a value:"))

times=int(raw_input("input count times:"))

print u"总和为:",eval("+".join([str(a)*i for i in range(1,times+1)]))

字符串转换后 用+合并 并用eval 转为求和

列表推导式是Python基础,好用,而又非常重要的功能,也是最受欢迎的Python特性之一,可以说掌握它是成为合格Python程序员的基本标准。本质上可以把列表推导式理解成一种集合了变换和筛选功能的函数,通过这个函数把一个列表转换成另一个列表。注意是另一个新列表,原列表保持不变。

看示例:

(1)对列表中的每项元素进行立方运算(变换功能)

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

b = [x ** 3 for x in a]

print(a)

print(b)

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

(2)对列表中为偶数的元素进行立方运算(带筛选条件的变换功能)

a= [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

b = [x ** 3 for x in a if x % 2 == 0]

print(b)

[8, 64, 216, 512, 1000]

从结果上可以看出有筛选条件的话是先筛选再变换,即先筛掉不满足条件的元素,再进行变换运算。可以同时加多个筛选条件,如对大于5的且是偶数的元素进行立方运算,示例如下:

a= [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

b = [x ** 3 for x in a if x % 2 == 0 if x > 5]

print(b)

[216, 512, 1000]

(3)与zip结合

将a,b两个列表中相对应得值组合起来,形成一个新列表。例如包含x坐标的列表与y坐标的列表形成相对应的点坐标[x, y]列表。

a= [-1, -2, -3, -4, -5, -6, -7, -8, -9, -10]

b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

xy = [[x, y] for x, y in zip(a, b)]

print(xy)

[[-1, 1], [-2, 2], [-3, 3], [-4, 4], [-5, 5], [-6, 6], [-7, 7], [-8, 8], [-9, 9], [-10, 10]]

(4)支持多层for循环

将一个嵌套列表转换成一个一维列表。

a= [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

b = [j for i in a for j in i]

print(b)

[1, 2, 3, 4, 5, 6, 7, 8, 9]

Python中还有字典推导式、集合推导式等,与列表推导式使用方式大致相同。

列表推导式的使用非常广泛,从实际使用经验来看,列表推导式使用的频率是非常高的,也是相当好用的。而对于列表推导式的多层for循环,尤其是3层以上的或带复杂筛选条件的,牺牲了较多的可读性,直接用多个普通for循环方式实现就可以了,毕竟方便的实现功能是第一位的,多几行代码就多几行吧。

实例:杨辉三角:

#coding=utf-8

def yhtriangle(n):

l=[1]

print l

while n>0:

l=[1]+[x+y for x,y in zip(l[:],l[1:])]+[1]

n-=1

print l

yhtriangle(10)

6、切片

切片语法如下:

s[begin : end : stride]

与简单切片语法相比,扩展切片只是增加了第3个参数,即步长参数(英文资料中通常称为"stride"或"step")。

扩展切片语法引入的"stride"参数是个需要特别注意的参数,因为它的正/负取值将会影响切片操作对源序列s的访问方向,而这正是本文开始那几个示例可能引起Python新手困惑的原因。

其实规则很简单,说穿不值一文钱:

1) 当stride参数为正值(positive)时,表明切片操作从左至右(即正向)访问源序列s的元素,此时,若begin和end参数有缺省,则Python解释器默认将其设置为None。如s[0 : : 1]会被解释器当作s[0 : None : 1],此时,end实际取值要大于其有效索引范围的上限值,以保证切片操作能访问到源序列s从begin开始的所有元素(从左向右)。

2) 当stride参数为负值(negative)时,表明切片操作从右至左(即逆向)访问源序列s的元素,此时,若begin和end参数有缺省,则Python解释器默认将其设置为None。如s[-1 : : -1]会被解释器当作s[-1 : None : -1],此时,end实际取值要小于其有效索引范围的下限值,已保证切片操作能访问到源序列s从begin开始的所有元素(逆向,从右向左)。

3) 无论stride参数取正值还是负值,切片表达式的begin和end索引值需要保证在切片操作的访问方向上,从begin到end之间有元素,这样切片操作才能保证返回非空集。

s[4,8,1]

 切片实例:

import os

os.system("ls -al > a.txt")

with open("a.txt") as fp:

for i in fp:

if "1.py" in i:

print i.split()[-2]#倒数第二位

break

>>> l=[1,2,3,4,5,6]

>>> l[:]

[1, 2, 3, 4, 5, 6]

>>> l[1:]

[2, 3, 4, 5, 6]

l[:]

l[1:]

转载于:https://www.cnblogs.com/zyy98877/p/8490942.html

一句话搞定python六剑客相关推荐

  1. 九十六、轻松搞定Python中的PPT办公自动化系列

    @Author:Runsen @Date:2020/7/14 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  2. sqlserver如何从周一计算周_纯零基础,花10周时间,完全搞定Python,有没有可能?...

    最简单适合小白练手的 10 个Python小项目,十天就能搞定Python. 今天我推荐大家一本书:<面向零基础的Python小项目>,如果你集中精力,花10周,也就是两个半月时间,搞定P ...

  3. python基础知识-一篇文章搞定Python全部基础知识

    原标题:一篇文章搞定Python全部基础知识 前言: 1.Python软件安装 第一章.字符串及数字变量 1.变量 要点提炼:Python变量为强类型动态类型.换言之,变量很任性,你给他int,他就是 ...

  4. 7步搞定Python数据可视化,业界大牛出品教程,Jupyter、Colab都有在线版

    郭一璞 发自 凹非寺  量子位 报道 | 公众号 QbitAI 做图表,谁不会?打开Excel,自动就可以生成各种各样的图表. 但你看这些图表呢? 结合真实地理数据,展现美国每个县的失业率. 全球自然 ...

  5. python编程基础是什么-编程学习第一步,让你20天搞定Python编程

    大家好,欢迎大家阅读篇文章,Python是当前火爆的编程语言之一:从后台开发到自动化,从数据分析到人工智能,都有Python的身影.我们掌握Python,就有了进入这些行业的可能.下面简单介绍下老猫和 ...

  6. [译] 12步轻松搞定python装饰器 - 简书

    [译] 12步轻松搞定python装饰器 - 简书 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂.搞定装饰器需要你了解一些函数式编 ...

  7. 一句话搞定webmap(一)——轻地图组件

    摘要: 遥想当年.在APP中增加LBS元素相当困难:要刻苦学习java,要刻苦学习iOS开发,要刻苦学习javascript-- 而现在.要制作一张地图真是越来越easy了!居然仅仅须要一句话.就能够 ...

  8. 九十八、轻松搞定Python中的Markdown系列

    @Author:Runsen @Date:2020/7/15 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  9. 九十七、轻松搞定Python中的PDF办公自动化系列

    @Author:Runsen @Date:2020/7/15 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

最新文章

  1. linux驱动:音频驱动(五)ASoc之codec驱动
  2. css3选项卡样式,css3选项卡标题样式设计1
  3. 数学图形(1.2)Sin曲线
  4. Ch -- 一个 C/C++ 解释器
  5. Windows 典藏篇-vc++运行库安装,Microsoft Visual C++ Build Tools官方工具
  6. 调用函数,求a+aa+aaa+....+aa...aa(n个a)
  7. Kafka的原理介绍及实践
  8. 利用redis写webshell
  9. 使用物理硬盘_硬盘坏道的几种非专业修复方法介绍
  10. 【Excle数据透视表】如何为数据透视表应用样式
  11. 十大经典排序算法6(Python版本)
  12. Docker安装MySQL教程
  13. [转].net中的认证(authentication)与授权(authorization)
  14. 北风网android,北风网JAVA/ASP.NET/Android系列公开课视频教程入门项目必学课程
  15. Json工具 将对象转换为json格式字符串
  16. 饱和度,对比度,锐度
  17. 利用感应加热原理,3秒即可烧红铁棒!
  18. 专升本英语——菜鸟学习笔记【知识点齐全-轻松学习】!!!
  19. 无法安装NET Framework3.5错误代码0x800F081F
  20. markdown学习笔记——字体/分割线/删除线/下划线

热门文章

  1. PHP新手上路(十二)
  2. Cloud Foundry技术资料汇总
  3. linux安装apache mysql tomcat
  4. 在origin 2018中同时画两个图,带errorbar和不带errorbar两种情况
  5. 认识 linux sysfs文件系统
  6. Asp.net PageBase学习总结
  7. Flex布局及其应用
  8. Jenkins+Gradle+Git+Pyger+二维码搭建Android自动打包平台
  9. Linux 利用lsof命令恢复删除的文件
  10. ArcGIS10.2 网络分析之路径分析(二)---构建网络数据集