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实现中文输出的两种方法
May 09 Python
教你用Type Hint提高Python程序开发效率
Aug 08 Python
Python入门学习指南分享
Apr 11 Python
对python中的logger模块全面讲解
Apr 28 Python
将tensorflow的ckpt模型存储为npy的实例
Jul 09 Python
python多进程实现文件下载传输功能
Jul 28 Python
PyQt5 加载图片和文本文件的实例
Jun 14 Python
python画图的函数用法以及技巧
Jun 28 Python
python 抓包保存为pcap文件并解析的实例
Jul 23 Python
Python中的延迟绑定原理详解
Oct 11 Python
在pycharm中实现删除bookmark
Feb 14 Python
2021年的Python 时间轴和即将推出的功能详解
Jul 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
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
php使用PDO操作MySQL数据库实例
2014/12/30 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
2014/03/28 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
微信小程序 用户数据解密详细介绍
2017/01/09 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
jQuery常用选择器详解
2017/07/17 jQuery
laravel5.3 vue 实现收藏夹功能实例详解
2018/01/21 Javascript
node.js实现为PDF添加水印的示例代码
2018/12/05 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
Jquery高级应用Deferred对象原理及使用实例
2020/05/28 jQuery
小程序实现上下切换位置
2020/11/16 Javascript
Python struct模块解析
2014/06/12 Python
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
Python开发的实用计算器完整实例
2017/05/10 Python
python 删除非空文件夹的实例
2018/04/26 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
2018/04/27 Python
Pandas之Dropna滤除缺失数据的实现方法
2019/06/25 Python
使用python搭建服务器并实现Android端与之通信的方法
2019/06/28 Python
python next()和iter()函数原理解析
2020/02/07 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
如何使用python写截屏小工具
2020/09/29 Python
基于python实现监听Rabbitmq系统日志代码示例
2020/11/28 Python
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
C#怎么让一个窗口居中显示?
2015/10/20 面试题
银行实习的自我鉴定
2013/12/10 职场文书
《识字五》教学反思
2014/03/01 职场文书
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
新闻稿格式范文
2015/07/18 职场文书
TensorFlow的自动求导原理分析
2021/05/26 Python
SQL 聚合、分组和排序
2021/11/11 MySQL