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中用Descriptor实现类级属性(Property)详解
Sep 18 Python
Python映射拆分操作符用法实例
May 19 Python
Python实现破解12306图片验证码的方法分析
Dec 29 Python
python+matplotlib绘制3D条形图实例代码
Jan 17 Python
python3 实现对图片进行局部切割的方法
Dec 05 Python
python利用跳板机ssh远程连接redis的方法
Feb 19 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
Apr 15 Python
如何通过Python实现标签云算法
Jul 02 Python
在Pytorch中计算自己模型的FLOPs方式
Dec 30 Python
Python通过正则库爬取淘宝商品信息代码实例
Mar 02 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
Apr 26 Python
用Python制作灯光秀短视频的思路详解
Apr 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
smarty自定义函数用法示例
2016/05/20 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
jquery 日期分离成年月日的代码
2010/05/14 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
js setTimeout 常见问题小结
2013/08/13 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
javascript获取select值的方法完整实例
2019/06/20 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
JS实现简易留言板增删功能
2020/02/08 Javascript
js实现的订阅发布者模式简单示例
2020/03/14 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
[01:10]3.19DOTA2发布会 三代刀塔人第一代
2014/03/25 DOTA
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
Python中的urllib模块使用详解
2015/07/07 Python
python计算圆周率pi的方法
2015/07/11 Python
python处理csv中的空值方法
2018/06/22 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
python实现五子棋人机对战游戏
2020/03/25 Python
django框架两个使用模板实例
2019/12/11 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
Web前端绘制0.5像素的几种方法
2017/08/11 HTML / CSS
用HTML5中的Canvas结合公式绘制粒子运动的教程
2015/05/08 HTML / CSS
与UNIX有关的几个名词
2015/09/17 面试题
高中生家长会演讲稿
2014/01/14 职场文书
工作作风建设心得体会
2014/10/22 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
物业管理交接协议书
2016/03/24 职场文书
Python基于百度AI实现抓取表情包
2021/06/27 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python