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实例一个类背后发生了什么
Feb 09 Python
python实现黑客字幕雨效果
Jun 21 Python
利用python打开摄像头及颜色检测方法
Aug 03 Python
flask session组件的使用示例
Dec 25 Python
Python实战购物车项目的实现参考
Feb 20 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
Apr 30 Python
python读写Excel表格的实例代码(简单实用)
Dec 19 Python
Python pip配置国内源的方法
Feb 14 Python
用Python绘制漫步图实例讲解
Feb 26 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
Python classmethod装饰器原理及用法解析
Oct 17 Python
python爬虫scrapy图书分类实例讲解
Nov 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
推荐个功能齐全的发送PHP邮件类
2007/01/03 PHP
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
PHP中使用BigMap实例
2015/03/30 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
Node.js中child_process实现多进程
2015/02/03 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
原生js中运算符及流程控制示例详解
2021/01/05 Javascript
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
使用Python中的tkinter模块作图的方法
2017/02/07 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
在Python中COM口的调用方法
2019/07/03 Python
简单了解django索引的相关知识
2019/07/17 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
python pillow库的基础使用教程
2021/01/13 Python
python 使用OpenCV进行简单的人像分割与合成
2021/02/02 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
浅谈html5之sse服务器发送事件EventSource介绍
2017/08/28 HTML / CSS
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
大学毕业生工作的自我评价
2013/10/01 职场文书
阿德的梦教学反思
2014/02/06 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
JavaScript 去重和重复次数统计
2021/03/31 Javascript
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS