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 相关文章推荐
下载安装setuptool和pip linux安装pip    
Jan 24 Python
python实现合并两个数组的方法
May 16 Python
用python做一个搜索引擎(Pylucene)的实例代码
Jul 05 Python
详解python3中zipfile模块用法
Jun 18 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
Jun 20 Python
深入理解python中sort()与sorted()的区别
Aug 29 Python
Python2和Python3之间的str处理方式导致乱码的讲解
Jan 03 Python
学习Python爬虫的几点建议
Aug 05 Python
浅析Python requests 模块
Oct 09 Python
Python import模块的缓存问题解决方案
Jun 02 Python
Python中OpenCV实现查找轮廓的实例
Jun 08 Python
Python3.10的一些新特性原理分析
Sep 15 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 Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
删除PHP数组中的重复元素的实现代码
2017/04/10 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
2020/02/07 PHP
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
JS匀速运动演示示例代码
2013/11/26 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
JavaScript实现图片轮播的方法
2015/07/31 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
2018/09/20 jQuery
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
简单的Python抓taobao图片爬虫
2014/10/26 Python
python实现根据用户输入从电影网站获取影片信息的方法
2015/04/07 Python
对tf.reduce_sum tensorflow维度上的操作详解
2018/07/26 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
Django Rest framework频率原理与限制
2019/07/26 Python
英国花园、DIY、电器和家居用品商店:Robert Dyas
2019/03/18 全球购物
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
初中生三年学习生活的自我评价
2013/11/03 职场文书
学期自我鉴定
2013/11/04 职场文书
农场厂长岗位职责
2013/12/28 职场文书
户籍证明的格式
2014/01/13 职场文书
群众路线教育查摆剖析材料
2014/10/10 职场文书
幼儿园见习总结
2015/06/23 职场文书
运输公司工作总结
2015/08/11 职场文书
零基础学java之循环语句的使用
2022/04/10 Java/Android