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 文件和路径操作函数小结
Nov 23 Python
基于Python实现的百度贴吧网络爬虫实例
Apr 17 Python
python使用wxPython打开并播放wav文件的方法
Apr 24 Python
Python生成密码库功能示例
May 23 Python
python3实现小球转动抽奖小游戏
Apr 15 Python
python3模拟实现xshell远程执行liunx命令的方法
Jul 12 Python
对Django url的几种使用方式详解
Aug 06 Python
Python 使用 environs 库定义环境变量的方法
Feb 25 Python
python将dict中的unicode打印成中文实例
May 11 Python
python打包多类型文件的操作方法
Sep 21 Python
python使用smtplib模块发送邮件
Dec 17 Python
python实现调用摄像头并拍照发邮箱
Apr 27 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
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
2018/05/24 PHP
jquery $.ajax相关用法分享
2012/03/16 Javascript
jQuery基本选择器选择元素使用介绍
2013/04/18 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
2015/12/16 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
webpack3之loader全解析
2017/10/26 Javascript
js实现手机web图片左右滑动效果
2017/12/29 Javascript
Node.js事件的正确使用方法
2019/04/05 Javascript
React精髓!一篇全概括小结(急速)
2019/05/23 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
[01:09:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第一场 6.2
2018/06/04 DOTA
python笔记(2)
2012/10/24 Python
python生成二维码的实例详解
2017/10/29 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
2018/05/08 Python
PyTorch学习笔记之回归实战
2018/05/28 Python
上级检查欢迎词
2014/01/18 职场文书
红旗团支部事迹材料
2014/01/27 职场文书
公务员政审个人鉴定
2014/02/25 职场文书
环保倡议书500字
2014/05/15 职场文书
施工安全生产承诺书
2014/05/23 职场文书
征兵宣传标语
2014/06/20 职场文书
倡议书的写法
2014/08/30 职场文书
民事诉讼代理授权委托书范本
2014/10/08 职场文书
超强台风观后感
2015/06/09 职场文书
2016年“我们的节日·中秋节”活动总结
2016/04/05 职场文书
公文写作:新员工转正申请书范本3篇!
2019/08/07 职场文书
python实现学生信息管理系统(面向对象)
2022/06/05 Python
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers