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基于urllib实现按照百度音乐分类下载mp3的方法
May 25 Python
Python中使用urllib2模块编写爬虫的简单上手示例
Jan 20 Python
简单讲解Python中的字符串与字符串的输入输出
Mar 13 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
python的多重继承的理解
Aug 06 Python
python中reader的next用法
Jul 24 Python
对python 命令的-u参数详解
Dec 03 Python
python and or用法详解
Jun 26 Python
Python使用指定字符长度切分数据示例
Dec 05 Python
关于ZeroMQ 三种模式python3实现方式
Dec 23 Python
python实时监控logstash日志代码
Apr 27 Python
python实现excel公式格式化的示例代码
Dec 23 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
yii2 resetful 授权验证详解
2017/05/18 PHP
windows环境下使用Composer安装ThinkPHP5
2018/05/18 PHP
jQuery中filter(),not(),split()使用方法
2010/07/06 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
基于javascript html5实现3D翻书特效
2016/03/14 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
走进javascript——不起眼的基础,值和分号
2017/02/24 Javascript
Javascript中字符串相关常用的使用方法总结
2017/03/13 Javascript
基于JavaScript实现验证码功能
2017/04/01 Javascript
React简单介绍
2017/05/24 Javascript
利用node.js爬取指定排名网站的JS引用库详解
2017/07/25 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
2020/02/19 Javascript
javascript实现图片轮换动作方法
2020/08/07 Javascript
pyqt4教程之messagebox使用示例分享
2014/03/07 Python
Python程序设计入门(3)数组的使用
2014/06/16 Python
Python实现批量转换文件编码的方法
2015/07/28 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
“四风”问题整改措施和努力方向
2014/09/20 职场文书
逃课检讨书范文
2015/05/06 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
小学思想品德教学反思
2016/02/24 职场文书