np合并 python_这15个tips,带你领略 Python 的简洁和优雅
本文通过15个具体的例子,带你领略 Python 的简洁和优雅。
下文中'P'即表示'Pythonic',很 Python 的写法,'NP'也就是相反,不是很'Pythonic'的写法。
1、为多个变量赋值
### NP:
a = 2
b = 5
c = 12
### P:
a,b,c = 2,5,12
2、变量值互换
a = 50
b = 25
### NP:
temp = a
a = b
b = temp
### P:
a,b = b,a
上面的例子通过了元组的pack和unpack完成了对a,b的互换,避免了使用临时变量temp,而且只用了一行代码。
3、链式比较
a = 50
b = 25
### NP:
0<= b and b<=a and a<100
### P:
0 <= b <= a < 100
后者的写法更接近数学表达式。
4、any/all函数
any
和 all
是 Python
的内置函数。对于 any
函数,可迭代参数的任何一个元素为真就返回 True
,否则返回 False
。对于 all
函数,如果可迭代参数的所有元素为真(或迭代器为空),返回 True
,否则返回 False
。
### NP:
xyz = [4641951.185 1393053.923 4133281.067]
for v in xyz:
if 0.0==v:
return False
return True
### P:
return all(xyz)
5、用in代替or简化判断
同样是多重判断问题,判断某个变量是否为多个可能取值之一
### NP:
if 'green'==s0 or 'red'==s0 or 'blue'==s0:
return True
else:
return False
### P:
return s0 in ('green', 'red', 'blue')
6、if/else 三目运算
### NP:
if age > 18:
ss = 'adult'
else:
ss = 'child'
### P:
ss = 'adult' if age > 18 else 'child'
后者的写法简单易懂,仅需一行代码就完成了常规写法4行代码的功能。
7、字符串列表的连接
lst_str = ["Python", "is", "a", "good", "language"]
### NP1:
ss = ''
for s0 in lst_str:
ss += s0 + ' '
### NP2:
ss = '%s %s %s %s %s'%(lst_str[0], lst_str[1], lst_str[2], lst_str[3], lst_str[4])
### P:
ss = ' '.join(lst_str)
使用 join
方法可以指定间隔字符(串)将字符串列表合并成一个字符串。
8、匹配字符串开头/结尾
fname1 = 'python.jpg'
fname2 = 'folwer.bmp'
fname3 = 'readme.txt'
### P:
fname1.startswith('python') #True
fname2.endswith('.jpg') #False
fname2.endswith(('.jpg', '.bmp')) #True
fname3.endswith(('.jpg', '.bmp')) #False
9、列表推导式
从列表中找出符合条件的元素组成新的列表
lst0 = [11, 22, 24, 87, 70]
### NP:
lst1 = []
for v in lst0:
if v>30:
lst1.append(v)
### P:
lst1 = [ v for v in lst0 if v>30 ]
可以结合上面两条tips,可以实现快速找出文件夹下指定类型的文件,例如:
picfiles = [nm for nm in os.listdir(mydir) if nm.endswith( ('.jpg', '.bmp', '.tiff', '.gif', '.png') ) ]
10、使用zip同步处理多个列表
当想要对多个列表对应的元素进行操作时
income = [201, 198, 195, 210, 199]
cost_rent = [80, 83, 77, 81, 80]
cost_food = [47, 64, 53, 51, 79]
balance = []
### NP:
nlen = len(income)
for i in range(nlen):
balance.append(income[i] - cost_rent[i] - cost_food[i])
### P:
for i0, cr, cf in zip(income, cost_rent, cost_food):
balance.append(i0 - cr - cf)
zip(a,b)
会生成一个可返回元组 (x,y)
的迭代器,其中x来自a,y来自b。一旦其中某个序列到底结尾,迭代宣告结束。因此迭代长度跟参数中最短序列长度一致。
11、列表去重
### NP:
lst_new = []
for v in lst_old:
if not v in lst_new:
lst_new.append(v)
### P:
lst_new = list(set(lst_old))
12、文件打开与关闭/上下文管理
### NP:
fp = open('result.txt', 'w')
try:
fp.write('just for fun!')
except IOError:
print('something error')
finally:
fp.close()
### P:
with open('result.txt', 'w') as fp:
fp.write('just for fun!')
with 关键字实现了上下文管理器,是一种更简洁也更安全的操作方法。上例中当离开 with 代码块的时候,系统会自动调用 fp.close() 方法关闭文件, 哪怕中间遇到异常,close 方法也会被调用。
13、Enumerate
枚举函数,用于枚举可迭代对象,并且同时返回元素的下标索引值。
如果你想在迭代一个序列的同时,得到被处理元素的索引下标。内置的 enumerate()
函数可以很好的解决这个问题:
array = ['Stone', 'Tom', 'Jobs', 'Jack']
### NP:
narr = len(array)
for i in range(narr):
print (i, array[i])
### P:
for i, a0 in enumerate(array):
print (i, a0)
#0 Stone
#1 Tom
#2 Jobs
#3 Jack
14、对齐字符串
有时,你想通过某种对齐方式来格式化字符串,输出一些提示信息
ss = 'Summary'
### NP:
print ('%s%s%s', '-'*20, ss, '-'*20)
### P:
print (ss.center(50,'-'))
#--------------------Summary--------------------
类似地,想让字符串左对齐或者右对齐,可以用 .ljust(50, '-') 或 rjust(50, '-')
15、解包
解压列表/元祖的元素,赋值给不同的变量
lst = ['jack', 18, 'Python', 'Good']
### NP:
name = lst[0]
age = lst[1]
lang = lst[2]
score = lst[3]
### P:
name, age, lang, score = lst
如果想解包一个长列表,只得到其中部分元素,例如第一个和最后一个元素:
### P:
head, *mid, tail = lst
该例子中,除了头、尾元素之外,中间不受关注的元素作为一个子列表全部赋值给了 mid 。
-END-
长按识别关注 | GitPython
np合并 python_这15个tips,带你领略 Python 的简洁和优雅相关推荐
- 带你领略python魔法~免费复制文档数据
前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~ 我们百度搜索一些东西得时候,经常找到文档里面 然后就会发现需要充值才能复制!怎么可以不花钱也保存呢? 今天就分享给大家一个python获取文档数据得方法 环 ...
- 以太坊后合并时代 15个概念带你深入了解以太坊2.0
北京时间9月15日14时42分左右,以太坊正式完成合并.以太坊在区块高度15537393触发合并机制,并产出首个PoS区块,高度为15537394,以太坊共识正式从PoW转为PoS机制. 以太坊进入后 ...
- python 1 2 3怎么拼接所有可能的数_6000字长文,带你用Python完成 “Excel合并(拆分)” 的各种操作!...
原标题:6000字长文,带你用Python完成 "Excel合并(拆分)" 的各种操作! 一.概述 其实Excel合并这个需求,应该是一个极为普遍的需求了.今天我们就利用Pytho ...
- python第三方库有哪些常用的、请列举15个-你想要的Python面试都在这里了【315+道题】...
第一部分 Python基础篇(80题) 1.为什么学习Python? 1.python是脚本语言,作为程序员至少应该掌握一本通用脚本语言,因为脚本语言与编译语言的开发测试过程不同,可以极大的提高编程效 ...
- 带你自学Python系列(六):列表解析和列表切片
↑ 点击上方[计算机视觉联盟]关注我们 今天是小编持续更新关于Python的知识总结以及Python实践项目应用的第6天,带你利用零碎时间自学最受欢迎的编程语言之一Python语言.你和小编一起打卡了 ...
- 带大家读python数据分析一书(三)
带大家读python数据分析一书(三) 写在开头 今天写博客的时候才发现CSDN里面的博客模板改版了更新了一些,好像更亲和html多一些了?连换行都要用上br了,不过无所谓这不是重点,对于我开说只 ...
- 训练数据太少?过拟合?一文带你领略“数据增长魔法”(上)
注意:本文是转载博客,如有侵权,请联系删除! 运行环境及其Paddle版本 [下面是我的主页链接] 来AI Studio互粉吧 https://aistudio.baidu.com/aistudio/ ...
- 风云编程python-动态排名可视化 | 带你领略编程语言20年风云变化
原标题:动态排名可视化 | 带你领略编程语言20年风云变化 作者 | 周萝卜 来源 | 萝卜大杂烩 2019已经过去,回看编程语言20年真是风云变化! 从 TIOBE 榜(热门榜)上来看,Java.C ...
- python动态排名可视化_动态排名可视化 | 带你领略编程语言20年风云变化
原标题:动态排名可视化 | 带你领略编程语言20年风云变化 作者 | 周萝卜 来源 | 萝卜大杂烩 2019已经过去,回看编程语言20年真是风云变化! 从 TIOBE 榜(热门榜)上来看,Java.C ...
最新文章
- NodeJS + PhantomJS 前端自动化资源监控
- 配置交换机端口聚合(思科)
- 安装完python后怎么使用-安装anaconda后该怎么使用
- 收到猎头信息的一些感想
- mysql 查询相同字段值的个数_好文 | MySQL 索引B+树原理,以及建索引的几大原则...
- ios did receive memory warning
- [Java基础]哈希值
- 产品经理经验谈100篇(八)-产品经理分析框架解析
- 【bzoj1758】[Wc2010]重建计划
- 大端、小端的前世今生
- 【Prescan学习】Prescan环境配置(介绍+安装+学习资源)
- 解决shardingsphere 4.1.1 SQLFeatureNotSupportedException: isValid sharding-jdbc
- 如何区分前端bug还是后端bug?
- 残差分析三要素(补充说明OLS六个条件与残差季节性)
- m3u8下载合并图片文件(但实际上还是ts文件)
- iOS各版本发布时间汇总
- python检索用人名查电话_ldap3 python搜索组成员并检索其sAMAcountName(Active Directory)...
- DIT和DIF实现快速傅里叶变换的FFT
- MATLAB高光谱图像处理基础
- 微信小程序测试过程中的各个要点(干货)
热门文章
- ​电赛 | 19年全国一等奖,北航学子回忆录。
- docker 删除_docker 批量删除镜像
- PHP引用全局作用域中可用的全部变量是,php全局变量之学习笔记
- java上传音频到服务器_Java 客户端向服务端上传mp3文件数据的实例代码
- navicat创建计算列_Tableau Part 9 计算字段amp;粒度聚合比率amp;表计算
- arcgis超级工具密码_浏览器的自动保存密码是如何将我们的密码泄露的?
- 使用TI 的低功耗C5x DSP的指纹识别方框图和解决方
- 类库探源——System.ValueType
- 常见性能优化小技巧原理
- oracle-单行函数