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模块顶层运行的代码引起的一个Bug
Jul 04 Python
python实现矩阵乘法的方法
Jun 28 Python
详解python的webrtc库实现语音端点检测
May 31 Python
python+selenium+autoit实现文件上传功能
Aug 23 Python
Request的中断和ErrorHandler实例解析
Feb 12 Python
python Opencv将图片转为字符画
Feb 19 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
python集合比较(交集,并集,差集)方法详解
Sep 13 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
May 31 Python
pyautogui自动化控制鼠标和键盘操作的步骤
Apr 01 Python
Python urllib库如何添加headers过程解析
Oct 05 Python
浅谈Python基础之列表那些事儿
May 11 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日期时间函数的高级应用技巧
2009/05/16 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
PHP常用header头定义代码示例汇总
2020/08/29 PHP
js查找父节点的简单方法
2008/06/28 Javascript
jQuery 获取URL参数的插件
2010/03/04 Javascript
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
JS获取几种URL地址的方法小结
2014/02/26 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
详解JavaScript中的客户端消息框架设计原理
2015/06/24 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
js仿百度切换皮肤功能(html+css)
2016/07/10 Javascript
JavaScript数组去重的几种方法效率测试
2016/10/23 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
javaScript+turn.js实现图书翻页效果实例代码
2017/02/16 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
layui select获取自定义属性方法
2018/08/15 Javascript
jquery html添加元素/删除元素操作实例详解
2020/05/20 jQuery
小程序实现图片移动缩放效果
2020/05/26 Javascript
vue中v-model对select的绑定操作
2020/08/31 Javascript
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
Python计算一个文件里字数的方法
2015/06/15 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
劳动之星获奖感言
2014/02/01 职场文书
文明倡议书范文
2014/04/15 职场文书
学前班评语大全
2014/05/04 职场文书
青春无悔演讲稿
2014/05/08 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
2015年库房工作总结
2015/04/30 职场文书
Golang实现AES对称加密的过程详解
2021/05/20 Golang