python函数enumerate,operator和Counter使用技巧实例小结


Posted in Python onFebruary 22, 2020

本文实例讲述了python函数enumerate,operator和Counter使用技巧。分享给大家供大家参考,具体如下:

最近看人家的代码,发现了很多python内置的函数和数据结构,可以大大减少我们的代码量(而且人家是优化过的)。python以简洁和强大的库著称,要是什么都自己写的话,太不python了。这里介绍常用的能大大提高我们生活幸福度的小技巧:

enumerate()

这个函数主要用于既要遍历元素又要记下索引。通常我们都会这样写(不能再笨拙了):

for i in range(0,len(list)):
  print i,list[i]

使用enumerate:

for index,text in enumerate(list):
  print index,text

itemgetter()

这个和下面的函数在operator库中,通常用在排序中。例如要对一个tuple的列表进行排序,找到第二个值最小的那个tuple。我一开始这样做:

list_of_tuples = [(1,2), (3,4), (5,0)]
min_tuple = None
minimum = sys.maxint
for pair in list_of_tuples:
  x,y = pair
  if y < minimum:
    min_tuple = pair
print min_tuple

后来,进化了,这样做:

def snd(pair):
  x,y = pair
  return y
list_of_tuples = [(1,2), (3,4), (5,0)]
min(list_of_tuples, key=snd)

这样看起来好多了,可是我发现人家的代码里是这样做的:

import operator
list_of_tuples = [(1,2), (3,4), (5,0)]
min(list_of_tuples, key=operator.itemgetter(1)) #use 2nd value

attgetter()

这个函数和上面的函数很像,不同的是,上面是用索引获取对应值,而这里使用属性来获取对应值,就像dict一样。

假如我们有个类Student:

class Student(object):
  def __init__(self, id, name, marks):
    self.id = id
      self.name = name
      self.marks = marks
  def __str__(self):
    return '%s has marks %s' %(self.name, self.marks)

我们有一个学生的实例的列表students,需要从里面找到分最高的。最简介的做法是:

students = [ Student(0, 'Foo', 30), Student(1, 'Bar', 95), Student(2, 'Baz', 80)]
best_student = max(students, key=operator.attrgetter('marks')) # don't forget the quotes

collections.Counter()

一看这个函数名,就知道是用来统计个数的~返回的是一个dict,key是各个元素,value是对应的个数。一开始,我并不知道这个函数,都是这样统计的:

d={}
for text in list:
  if not text in d.keys():
    d[text]=1
  else:
    d[text]+=1
print d

现在,直接一句话:

counter=collections.Counter(list)
print counter

之后获取各元素的个数,使用方法同一般的dict。如果增加元素e1,e2和对应个数,直接counter.update({e1=4,e2=3})就可以。

此外,这个Counter不仅用来数数,还有好多函数方便各种操作,例如:

  • counter.most_common(n) 返回数目最多的前n个元素和对应个数
  • a.substract(b) 返回一个Counter,Counter a减去Counter b,多的元素个数为正值,少的元素个数为负值
  • counter.elements() 返回一个element列表,其中每个元素有多少个就重复多少次
  • counter.values() 返回个数列表,通常配合sum(counter.values())
  • counter.clear() 重置counter
  • del counter[e]删除元素e和它的纪录
  • 算数操作:+和- ,对应元素个数加减;|和&,两个counter的并集和交集

关于Python相关内容感兴趣的读者可查看本站专题:《Python函数使用技巧总结》、《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
用Python编程实现语音控制电脑
Apr 01 Python
python实现的解析crontab配置文件代码
Jun 30 Python
Python fileinput模块使用介绍
Nov 30 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
python实现音乐下载的统计
Jun 20 Python
python爬取微信公众号文章的方法
Feb 26 Python
python3.x实现base64加密和解密
Mar 28 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
Apr 15 Python
在matplotlib中改变figure的布局和大小实例
Apr 23 Python
Python使用文件操作实现一个XX信息管理系统的示例
Jul 02 Python
Python实现随机生成迷宫并自动寻路
Jun 13 Python
python通过文本在一个图中画多条线的实例
Feb 21 #Python
python使用html2text库实现从HTML转markdown的方法详解
Feb 21 #Python
python-sys.stdout作为默认函数参数的实现
Feb 21 #Python
pycharm运行程序时看不到任何结果显示的解决
Feb 21 #Python
Python 安装 virturalenv 虚拟环境的教程详解
Feb 21 #Python
python ffmpeg任意提取视频帧的方法
Feb 21 #Python
Python实现自动访问网页的例子
Feb 21 #Python
You might like
修改PHP的memory_limit限制的方法分享
2012/02/21 PHP
如何判断php数组的维度
2013/06/10 PHP
利用location.hash实现跨域iframe自适应
2010/05/04 Javascript
javascript下数值型比较难点说明
2010/06/07 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
详解JavaScript中的六种错误类型
2017/09/21 Javascript
vue axios 二次封装的示例代码
2017/12/08 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
Vue.js watch监视属性知识点总结
2019/11/11 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
2020/11/23 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
在Docker上开始部署Python应用的教程
2015/04/17 Python
MySQL最常见的操作语句小结
2015/05/07 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
python中join()方法介绍
2018/10/11 Python
python reverse反转部分数组的实例
2018/12/13 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
倩碧美国官网:Clinique美国
2016/07/20 全球购物
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
个人廉洁自律承诺书
2014/03/27 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
团员个人总结
2015/02/26 职场文书
读《儒林外史》有感:少一些功利,多一些真诚
2020/01/19 职场文书
分析并发编程之LongAdder原理
2021/06/29 Java/Android
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫
Mysql中常用的join连接方式
2022/05/11 MySQL