Python 技巧总结
内置函数
enumerate
enumerate(list[,start=0])
:遍历list
,并索引
my_list = ['apple', 'banana', 'grapes', 'pear']
for i, value in enumerate(my_list, 1):print(i, value)
输出:
(1, 'apple')
(2, 'banana')
(3, 'grapes')
(4, 'pear')
divmod(x,y)
如果 x
为 int
,返回x÷y
的商和余数组成的元组,(x//y, x%y)
。
如果 x
为 float
,则返回 (math.floor(x / y), x%y)
。
可以以此很方便的形成二维数组:
>>>[divmod(i, 3) for i in range(9)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
短路求值
三元运算
利用 python 逻辑运算的短路求值特性,我们可以实现python不支持的三元运算符 bool ? a : b
:
bool and a or b # 其中要求 a, b 为真
当然有更pythonic
的实现方法:
a if bool else b
and 与 or 优先级
True or True and False #=> True
造成结果为True
的原因是因为短路求值,不是因为存在臆想中的优先级问题--True or (True and False),
or 和
and` 一起使用,遵循自左向右计算原则。
参见:短路求值
装饰器
示例1:
table = [i * i for i in range(5)]
或:
def call(*argv, **kwargs):def call_fn(fn):return fn(*argv, **kwargs)return call_fn
@call(5)
def table(n):value = []for i in range(n):value.append(i*i)return value
或:
@list
@call(5)
def table(n):for i in range(n):yield i * i
结果:
len(table), table[3] #=> (5, 9)
数组(List)
转置矩阵
m = [[1,2],[3,4]]
zip(*m)
碾平list
a = [1, 2, [3, 4], [[5, 6], [7, 8]]]
flatten = lambda x: [y for l in x for y in flatten(l)] \if type(x) is list else [x]
flatten(a)
# [1,2,3,4,5,6,7,8]
list分组
a=[3, 8, 9, 4, 1, 10, 6, 7, 2, 5]
print([a[i:i+3] for i in range(0,len(a),3)])
# [[3, 8, 9], [4, 1, 10], [6, 7, 2], [5]]
字典(Dict)
key,value互换
m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
{v: k for k, v in m.items()}
# {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
Dict.get()
dict.get(key[, default=None])
: 如果key
存在,返回dict[key]
,否则返回default
,default
默认值为None
。相比较,dict['key']
只能获取 dict
中存在的key
的值,如果不存在则触发 KeyError
。利用此方法,在对字典进行某些运算时会更优雅:
if key not in dct:dct[key] = 0
dct[key] = dct[key] + 1
dct[key] = dct.get(key, 0) + 1
d = {'a': 1,'b': 2,
}
d.get('c', 3) #=> 3
Dict.setdefault()
Dict.setdefault(key, default)
:如果存在,返回 dct[key]
,不存在则把 dct[key]
设为 default
并返回它。当一个默认的值是一个你可以修改的对象的时候这是很有用的。
dct = {}
for key, value in data:if key in dct:dct[key].append(value)else:dct[key] = [value]
dct = {}
for (key, value) in data:group = dct.setdefault(key, []) # key might exist alreadygroup.append(value)
参见:Python:字典的剧本
Python 技巧总结相关推荐
- 程序员必知的20个Python技巧
作者 | Duomly 译者 | 弯月,编辑 | 郭芮 出品 | CSDN(ID:CSDNnews) Python是一门流行且应用广泛的通用编程语言,其应用包括数据科学.机器学习.科学计算等领域,以及 ...
- 你需要知道的20个常用的Python技巧
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法那些事 Python的可读性和简单性是其广受 ...
- python%20语言 20培训_Python语言学习之20个值得学习的Python技巧
点击蓝字获取更多精彩信息 1.字符串反转 使用切片反转字符串. str1="qwert" rev_str1=str1[::-1] #输出 # trewq 2.使首字母 ...
- 【python技巧】“”、“”等符号操作
[python技巧] 1)[关于'&' :按照二进制进行与操作,可以用作判断奇偶][https://zhidao.baidu.com/question/308587899.html] & ...
- 离散度计算公式 python_被多种离散化场景困扰?8种python技巧!让数据处理更简单...
前言 python数据处理与分析学习过程中,需要有这样的一种意识,即元"为什么选择了python而不是其他?"既然选择了python,那么在实际应用中,它到底哪里不一样?大家说的方 ...
- python大型项目经验_经验丰富程序员才知道的8种高级Python技巧
全文共2330字,预计学习时长11分钟 图源:unsplash 本文将介绍8个简洁的Python技巧,若非经验十足的程序员,你肯定有些从未见过.向着更简洁更高效,出发吧! 1.通过多个键值将对象进行排 ...
- python生成uuid_咸鱼高赞回答:有什么相见恨晚的Python技巧,附赠python最新教程...
日常工作几乎离不python.一路走来,他积累了不少有用的技巧和tips,现在就将这些技巧分享给大家.这些技巧将根据其首字母按A-Z的顺序进行展示. Python相关学习资料获取方式:转发文章+关注私 ...
- python初学者_面向初学者的20种重要的Python技巧
python初学者 Python is among the most widely used market programming languages in the world. This is be ...
- 你与数据科学家只差这26条python技巧
戳蓝字"CSDN云计算"关注我们哦! 作者 | Peter Gleeson 来源 | Python数据科学 编译 | wLsq Python是目前世界上最流行的编程语言之一.因为: ...
- python 编程效率_如何有效提升数据分析效率?五大Python技巧
如何有效提升数据分析效率?相信这是所有数据分析工作者都想解决的问题.本文整理了五大python技巧,分别是Pandas Profiling:使用 Cufflinks 和 Plotly 绘制 Panda ...
最新文章
- OpenCV代码提取:cvtColor函数的实现
- 读了几篇boosting文献的收获
- java if在内存中_java如何将对象暂存到内存中?
- 如何安装Favicon
- dedecms怎么改php版本_PHP程序员进阶之路
- Unity有哪些让做项目事半功倍的插件值得推荐?
- C#中lock关键字的用法
- 英语语音识别_英语 语音识别_英语语音识别软件 - 云+社区 - 腾讯云
- docker pipework
- 计算机二级数据库系统知识点,2020年全国计算机二级Access复习知识点:分布式数据库系统...
- linux移植win项目找不到pthread.h
- python qt designer 重定向_[Python自学] PyQT5-QTDesigner中关联信号和槽
- vue3.0实现jsoneditor组件
- matlab 波束图,Matlab波束形成程序
- 第六章第三十一题(金融应用:信用卡号的合法性验证)(Financial: credit card number validation)
- JAVA之ZIP、RAR解压工具类
- java 16进制 负数_Java随笔:小心16进制负数
- Fail to open the referenced table
- 根据出生年月日算出实际的月龄
- No module named 'torchvision.ops'的解决办法