Python高效编程的技巧
工作中经常要处理各种各样的数据,遇到项目赶进度的时候自己写函数容易浪费时间。
Python 中有很多内置函数帮你提高工作效率!
一:根据条件在序列中筛选数据
1.假设有一个数字列表 data, 过滤列表中的负数
使用列表推导式:
result = [iforiindataifi >=0]
于 80 分的同学
d = {x:randint(50,100)forxinrange(1,21)}
{k: vfork, vind.items()ifv >80}
二:对字典的键值对进行翻转
使用 zip() 函数
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
>>> s1 = {x: randint(1,4)forxinsample('abfcdrg', randint(1,5))}
>>> s1
{'b':1,'f':4,'g':3,'r':1}
>>> d = {k:vfork, vinzip(s1.values(), s1.keys())}
>>> d
{1:'r',4:'f',3:'g'}
三. 统计序列中元素出现的频度
1.某随机序列中,找到出现次数最高的3个元素,它们出现的次数是多少?
构造随机序列如下:
data = [randint(0,20)for_inrange(20)]
方法1: 可以使用字典来统计,以列表中的数据为键,以出现的次数为值
fromrandomimportrandint
defdemo():
data = [randint(0,20)for_inrange(30)]
# 列表中出现数字出现的次数
d = dict.fromkeys(data,0)
forvinli:
d[v] +=1
returnd
方法2:直接使用 collections 模块下面的 Counter 对象
>>> data = [randint(0,20)for_inrange(30)]
>>> data
[7,8,5,16,10,16,8,17,11,18,11,17,15,7,2,19,5,16,17,17,12,19,9,10,0,20,11,2,11,10]
>>> c2 = Counter(data)
>>> c2
Counter({17:4,11:4,16:3,10:3,7:2,8:2,5:2,2:2,19:2,18:1,15:1,12:1,9:1,0:1,20:1})
>>> c2[14]
4
>>> c2.most_common(3)# 统计频度出现最高的3个数
[(17,4), (11,4), (16,3)]
2. 对某英文文章单词进行统计,找到出现次数最高的单词以及出现的次数
通过上面的练习,我们知道可以用 Counter 来解决
importre
fromcollectionsimportCounter
# 统计某个文章中英文单词的词频
withopen('test.txt','r', encoding='utf-8')asf:
d = f.read()
total = re.split('W+', d)# 所有的单词列表
result = Counter(total)
print(result.most_common(10))