总结 Python 编程中的一些小 Tricks

Posted Xavier Jiezou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了总结 Python 编程中的一些小 Tricks相关的知识,希望对你有一定的参考价值。

文章目录


引言

笔者从 19 年开始学习 Python,如今已有 3,4 年。从最基础的 Python 语法,到面向对象编程,如今笔者已经可以独立地完成一个小型 Python 库的开发。今天,笔者将 Python 编程中的一些小 Tricks 做了一下总结,并分享给大家,旨在让您的代码书写更优雅,编程效率更高!

技巧

根据字典的值来反向获取键

一般,我们都是通过字典的键来获取值的,因为字典要求键必须唯一,而值可以重复:(如果键出现了重复,后定义的键值对会替换之前定义的键值对)

>>> 'a': 1, 'a': 2
'a': 2
>>> 'a': 1, 'b': 1
'a': 1, 'b': 1

有时候我们可能需要根据值来反推键,那么可以这样做:

>>> d = 'a': 1, 'b': 2
>>> [k for k, v in d.items() if v==1]
['a']

假如值有重复,上述方法会返回所有匹配的值对应的键:

>>> d = 'a': 1, 'b': 1
>>> [k for k, v in d.items() if v==1]
['a', 'b']

统计列表中各元素的出现次数

我们通常会使用如下方法来统计列表中各元素的出现次数:

>>> x = [1, 2, 3, 4, 2, 2, 3, 1, 4, 4, 4]
>>> d = 
>>> for i in x:
...     if i not in d:
...             d[i] = 1
...     else:
...             d[i] += 1
...
>>> d
1: 2, 2: 3, 3: 2, 4: 4

其实也可以直接使用列表的 count() 方法来获取指定元素的出现次数:

>>> x = ['1', '2', '3', '4', '2', '2', '3', '1', '4', '4', '4']
>>> x.count('4')
4

当然,简单变形一下也可以获取各个元素的出现次数:

>>> x = ['1', '2', '3', '4', '2', '2', '3', '1', '4', '4', '4']
>>> str(i): x.count(str(i)) for i in range(1, 5)
'1': 2, '2': 3, '3': 2, '4': 4

再搭配 max() 函数可以找到列表中出现次数最多的元素:

>>> x = ['1', '2', '3', '4', '2', '2', '3', '1', '4', '4', '4']
>>> max(set(x), key=x.count)
'4'

判断列表中是否有一条元素存在于字符串中

这里有一个需求:如果列表中有一个元素存在于字符串中就返回 True;否则,返回 False。如何用一行代码实现?这里可以用到内置 any() 函数:

>>> x = ['a', 'b', 'c']
>>> s = '111'
>>> any(i in s for i in x)
False
>>> s = '1a1'
>>> any(i in s for i in x)
True
>>> s = '1b1'
>>> any(i in s for i in x)
True
>>> s = '1c1'
>>> any(i in s for i in x)
True

字符串反转

我们都知道索引 [0] 是取字符串的首个字符,索引 [-1] 是取字符串的末尾字符,然后 [start:end:step] 是对字符串按照指定步长切片:

>>> x = 'abc'
>>> x[0]
'a'
>>> x[-1]
'c'
>>> x[0:3:2]
'ac'

指定步长为 -1 还可以非常方便地反转字符串:

>>> x = 'abc'
>>> x[::-1]
'cba'

将所有列表元素拼接为一个字符串

如何将所有列表元素按指定分隔符拼接为一个字符串?常规的做法如下:

x = ['a', 'b', 'c']
>>> s = ''
>>> for i in x:
		s += i+','

>>> s
'a,b,c,'
>>> s[:-1]
'a,b,c'

更酷的操作应该是这样的:

>>> x = ['a', 'b', 'c']
>>> ','.join(x)
'a,b,c'

格式化字符串

在字符串中添加变量是一种常见的做法,我们经常使用的可能是字符串的 format() 方法:

>>> name = 'John'
>>> 'hello '.format(name)
'hello John'
>>> name = 'Mary'
>>> 'hello '.format(name)
'hello Mary'

但更酷的、可读性更好的方法是使用 F 字符串:

>>> name = 'John'
>>> f'hello name'
'hello John'
>>> name = 'Mary'
>>> f'hello name'
'hello Mary'

连等赋值

如何给两个变量赋同一个值?常规的方案是分别赋值:

>>> a = 1
>>> b = 1
>>> a
1
>>> b
1

但在 Python 中,你可以直接这样做:

>>> a = b = 1
>>> a
1
>>> b
1
>>> a = 2
>>> a
2
>>> b
1

并且,修改其中一个值也不会影响另一个值。

连用比较运算符

如何判定一个变量是否属于某个整数区间?常规的方案是分别判定该变量是否超出区间的上限和下限:

>>> a = 2
>>> a > 1
True
>>> a < 3
True
>>> a > 1 and a < 3
True

但在 Python 中,你可以直接这样做:

>>> a = 2
>>> 1 < a < 3
True

虽然 Python 中允许连用多个比较运算符,但运算符的数量也不要太多(最好不要超过3个),不然写的代码可读性很差。

交换两个变量的值

如何交换两个变量的值?常规的方案是定义一个中间变量来临时保存:

>>> a = 0
>>> c = 1
>>> b = c
>>> c = a
>>> a = b
>>> a
1
>>> c
0

但在 Python 中,你可以直接这样做:

>>> a, b = 0, 1
>>> a
0
>>> b
1
>>> a, b = b, a
>>> a
1
>>> b
0

参数解析

这里有一个乘法函数 mul(),返回 2 个数字相乘的结果:

>>> def mul(a, b):
	return a*b

>>> mul(2, 3)
6

如果有 3 个,4 个或多个数字相乘,该如何实现呢?其实你可以使用 *args 进行参数解析:

>>> def mul(*args):
	tmp = 1
	for i in args:
		tmp *= i
	return tmp

>>> mul(2, 3)
6
>>> mul(2, 3, 4)
24
>>> mul(2, 3, 4, 5)
120

**kwargs 的用法和 *args 差不多,只不过它接受的只能是关键字参数,即 key=value 这种形式,返回的数据类型是字典:

>>> def func(**kwargs):
	return kwargs

>>> func(a=1, b=2, c=3)
'a': 1, 'b': 2, 'c': 3

参考

以上是关于总结 Python 编程中的一些小 Tricks的主要内容,如果未能解决你的问题,请参考以下文章

关于面试总结4-python笔试题

Python作业本——前言

Python图像特征的音乐序列生成数据集制作的一些tricks

Python 中的一些小技巧

Python 中的一些小技巧

校招笔试题编程技巧总结