- 引言
- 技巧
- 根据字典的值来反向获取键
- 统计列表中各元素的出现次数
- 判断列表中是否有一条元素存在于字符串中
- 字符串反转
- 将所有列表元素拼接为一个字符串
- 格式化字符串
- 连等赋值
- 连用比较运算符
- 交换两个变量的值
- 参数解析
- 参考
引言
笔者从 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}
参考
- 6 Cool Python Tricks You Should Know
- 10 Essential Python Tips And Tricks For Programmers
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)