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写的图片蜘蛛人代码
Aug 27 Python
Python fileinput模块使用介绍
Nov 30 Python
python 捕获 shell/bash 脚本的输出结果实例
Jan 04 Python
python数据类型_字符串常用操作(详解)
May 30 Python
python实现决策树分类算法
Dec 21 Python
python中使用print输出中文的方法
Jul 16 Python
Django urls.py重构及参数传递详解
Jul 23 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 Python
Python的对象传递与Copy函数使用详解
Dec 26 Python
Python流程控制语句的深入讲解
Jun 15 Python
Python hashlib和hmac模块使用方法解析
Dec 08 Python
Python 的演示平台支持 WSGI 接口的应用
Apr 20 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入门的学习方法
2007/01/02 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
2016/06/20 PHP
Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
2019/12/04 PHP
javascript入门基础之私有变量
2010/02/23 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
微信小程序 出现错误:{&quot;baseresponse&quot;:{&quot;errcode&quot;:-80002,&quot;errmsg&quot;:&quot;&quot;}}解决办法
2017/02/23 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
vue下拉列表功能实例代码
2018/04/08 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
vue webpack重写cookie路径的方法
2019/07/10 Javascript
微信小程序引入Vant组件库过程解析
2019/08/06 Javascript
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
Python编写简单的HTML页面合并脚本
2016/07/11 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
高级运动鞋:GREATS
2019/07/19 全球购物
政法大学毕业生自荐信范文
2014/01/01 职场文书
感恩节活动方案
2014/01/27 职场文书
环保建议书300字
2014/05/14 职场文书
群众路线表态发言材料
2014/10/17 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书