前言
Python 是一门非常优美的语言,并且功能也非常强大。本文搜集并总结了一些 Python 常用的技巧,一方面自己巩固知识点,另一方面也可以给正在 Python 这条道路的同胞们一些指导。
话不多说,直接进入主题。
正文
交换变量值
快速交换两个变量的值,操作非常简单,示例如下:
a = 1b = 2
print('before : a =',a,'b=',b)
a,b = b,a
print('after : a =',a,'b=',b)
输出:
before : a = 1 b= 2after : a = 2 b= 1
合并列表中的所有元素
将一个列表中的所有元素合并起来,示例如下:
a = ["Python","is","good"]print(' '.join(a))
输出:
Python is这里使用空格来隔开每一个元素。
查找列表中出现频率最高的元素
在一个列表中,统计出重复最多的元素,并计算其重复次数,示例如下:
a = [1,2,3,3,4,5,6,1,2,7,2,9,1,2]print(max(set(a),key = a.count))
from collections import Counter
cnt = Counter(a)
print(cnt.most_common())
输出:
2[(2, 4), (1, 3), (3, 2), (4, 1), (5, 1), (6, 1), (7, 1), (9, 1)]
第一个打印,输出的是列表中出现的频率最高的元素
第二个打印,输出的是列表中每个元素出现的频率,用元组的形式表示。
其中第一个输出
也可以写成:
print(max(set(a),key = lambda x:a.count(x)))这样其实更便于理解。
关于 max 的用法可以参考这里。
关于 set 的用法可以参考这里
而第二个输出:
print(cnt.most_common())这里的most_common可以指定参数,假如说传入cnt.most_common(2),那么将返回排前2个的集合,如果不指定参数,默认输出所有。
关于Counter的用法可以参考这里。
返回列表中最小值和最大值的索引
a = [21,34,56,32,2,45]def find_max_value_index(a):
return max(range(len(a)),key = a.__getitem__)
def find_min_value_index(a):
return min(range(len(a)),key = lambda
注意,这里定义了两个函数,分别计算最大值和最小值的索引值。两种写法有些不同,一个是使用了关键字lambda,我个人更倾向于添加lambda关键字的这种,利于理解。
为了更容易理解上面的这种写法, 这里把语句拆解开并打印出来,这样就一目了然了;
print(range(len(a)))
print(a.__getitem__(0))
输出:
6range(0, 6)
检查两个字符串是不是由相同字母不同顺序组合
from collections import Countera = 'awawa211eqsass'
b = 'wadqw1'
c = 'abcde'
d = 'cdabe'
输出:
FalseTrue
反转字符串
a = 'awawa211eqsass'f = a[::-1]
print(f) #ssasqe112awawa
也可以使用循环,不过是分行输出
for x in reversed(a):print(x)
如果是要翻转一个很长的数字
aa = 12345678print(int(str(aa)[::-1])) #87654321
反转列表
类似上面的反转字符串
bb = [1,2,3,4,5]print(bb[::-1]) #[5,4,3,2,1]
同样可以通过循环的方式来
for x in reversed(bb):print(x)
移除列表中的重复元素
>>> a = [1,2,3,4,5,3,2,1,7]>>> print(list(set(a)))
[1, 2, 3, 4, 5, 7]
还可以导入库中的模块来实现
>>> b = ['aaw','bbb','ccc','aaw']>>> print(list(set(b)))
['aaw', 'ccc', 'bbb']
>>> from collections import OrderedDict
>>> print(list(OrderedDict.fromkeys(b).keys()))
['aaw', 'bbb', 'ccc']
合并字典
a = {'a':1}b = {'b':2}
#方法一
print({**a,**b})
#方法二
print(dict(a.items() | b.items()))
#方法三
a.update(b)
print(a)
输出结果:
{'a': 1, 'b': 2}{'b': 2, 'a': 1}
{'a': 1, 'b': 2}
for else 用法
for x in range(1,5):if x == 0:
break
else:
print("did not break out of for loop")
输出:
did not break out of for loop
这个用法的意思就是,当循环结束后但是 for 中的内容还没有执行,就会执行 else 中的内容。
转换列表为逗号分隔符形式
#纯字符串列表a = ['aaa','bbb','ccc']
print(','.join(a))
#纯数字列表
b = [1,2,3,4]
print(','.join(map(str,b)))
#字符串加数字列表
c = [1,2,'aaa',4]
print(','.join(map(str,c)))
输出:
aaa,bbb,ccc1,2,3,4
1,2,aaa,4
字典 get 的方法
a = {'aaa':10,'bbb':20,'ccc':30}print(a.get("ddd",23))
可以传入默认值,如果查询不到 key 的话,就会返回默认值。
通过「键」排序字典元素
a = {'bbb':50,'aaa':20,'ccc':30}print(sorted(a.items(),key=lambda x:x[1]))
#------测试-------#
print(a.items())
print(('bbb', 50)[1])
输出:
[('aaa', 20), ('ccc', 30), ('bbb', 50)]dict_items([('bbb', 50), ('aaa', 20), ('ccc', 30)])
50
为了便于理解,这里输出了 items()的值。
a = {'bbb':50,'aaa':20,'ccc':30}#方法一
print(sorted(a.items(),key=lambda x:x[1]))
#方法二
from operator import itemgetter
print(sorted(a.items(),key = itemgetter(1)))
print(sorted(a,key=a.get))
输出:
[('aaa', 20), ('ccc', 30), ('bbb', 50)][('aaa', 20), ('ccc', 30), ('bbb', 50)]
['aaa', 'ccc', 'bbb']
其中最后一句输出的是排序后的 key 列表。
转置二维数组
org = [['a','b'],['c','d'],['e','f']]tran = zip(*org)
print(list(tran))
输出:
[('a', 'c', 'e'), ('b', 'd', 'f')]链式函数调用
这是一种比较新颖的写法,可以大大的缩短精简代码:
def add(a,b):return a+b
def sub(a,b):
return a-b
b = True
print((add if b else sub)(3,2))
输出为:5
链式比较
a = 5print(1< a < 8)
print(1 == a < 20)
输出为:
TrueFalse
列表拷贝的几种方式
直接看示例吧
#仅赋值a = [1,2,3,4]
b = a
b[0] = 5
print(a,b)
#深拷贝
a = [1,2,3,4]
b = a[:]
b[0] =10
print(a,b)
#相当于重新创建一个list空间
a = [1,2,3,4]
b = list(a)
b[0] = 6
print(a,b)
#使用 list的copy函数,只有 Python3支持
a = [1,2,3,4]
b = a.copy()
b[0] = 8
print(a,b)
#导入包来实现深拷贝
from copy import deepcopy
b = [[1,2],[3,4]]
c = deepcopy(b)
c[0][0] = 5
输出结果:
[5, 2, 3, 4] [5, 2, 3, 4][1, 2, 3, 4] [10, 2, 3, 4]
[1, 2, 3, 4] [6, 2, 3, 4]
[1, 2, 3, 4] [8, 2, 3, 4]
[[1, 2], [3, 4]] [[5, 2], [3, 4]]
可以看到, 第一种方式仅仅是将 list 赋值给另一个对象,并非开辟新的空间,其他几种方式都属于深拷贝。
参考文档:
https://www.toutiao.com/a6591753290361340429/?tt_from=android_share&utm_campaign=client_share×tamp=1535293192&app=news_article&iid=41720269988&utm_medium=toutiao_android&group_id=6591753290361340429