您当前的位置: 首页 >  Python

Xavier Jiezou

暂无认证

  • 1浏览

    0关注

    394博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

总结 Python 编程中的一些小 Tricks

Xavier Jiezou 发布时间:2022-05-02 15:08:19 ,浏览量:1

在这里插入图片描述

文章目录
    • 引言
    • 技巧
      • 根据字典的值来反向获取键
      • 统计列表中各元素的出现次数
      • 判断列表中是否有一条元素存在于字符串中
      • 字符串反转
      • 将所有列表元素拼接为一个字符串
      • 格式化字符串
      • 连等赋值
      • 连用比较运算符
      • 交换两个变量的值
      • 参数解析
    • 参考

引言

笔者从 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'

此外,F 字符串搭配数学运算还能很方便地在调试过程中打印中间变量:

>>> a = 2
>>> b = 3
>>> f"{a+b=}"
'a+b=5'
连等赋值

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

>>> 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 >> a > 1 and a >> a = 2
>>> 1 > 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
关注
打赏
1661408149
查看更多评论
立即登录/注册

微信扫码登录

0.0390s