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去掉字符串中空格的方法
Mar 11 Python
跟老齐学Python之变量和参数
Oct 10 Python
Python的subprocess模块总结
Nov 07 Python
python爬虫入门教程--快速理解HTTP协议(一)
May 25 Python
python多进程和多线程究竟谁更快(详解)
May 29 Python
Python中的pygal安装和绘制直方图代码分享
Dec 08 Python
Python 删除整个文本中的空格,并实现按行显示
Jul 24 Python
python使用socket实现的传输demo示例【基于TCP协议】
Sep 24 Python
Python操作MongoDb数据库流程详解
Mar 05 Python
Django项目uwsgi+Nginx保姆级部署教程实现
Apr 19 Python
解决Python数据可视化中文部分显示方块问题
May 16 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 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中执行系统外部命令
2006/10/09 PHP
php下连接mssql2005的代码
2011/01/17 PHP
php session_start()出错原因分析及解决方法
2013/10/28 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
2019/10/17 PHP
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
JavaScript中的比较操作符&gt;、=、
2014/12/31 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
微信小程序实战之上拉(分页加载)效果(2)
2017/04/17 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
vuex state及mapState的基础用法详解
2018/04/19 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
微信小程序模板template简单用法示例
2018/12/04 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
python实现单向链表详解
2018/02/08 Python
详解Python中where()函数的用法
2018/03/27 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
博士生入学考试推荐信
2013/11/17 职场文书
初婚未育证明
2014/01/15 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
企业环保标语
2014/06/10 职场文书
学生会辞职信
2015/03/02 职场文书
离婚起诉书范文2015
2015/05/19 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书
python装饰器代码解析
2022/03/23 Python