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 相关文章推荐
10种检测Python程序运行时间、CPU和内存占用的方法
Apr 01 Python
理解Python垃圾回收机制
Feb 12 Python
python素数筛选法浅析
Mar 19 Python
python调用java的jar包方法
Dec 15 Python
centos7之Python3.74安装教程
Aug 15 Python
Flask项目中实现短信验证码和邮箱验证码功能
Dec 05 Python
python实现udp聊天窗口
Mar 31 Python
python如何编写类似nmap的扫描工具
Nov 06 Python
Django Model层F,Q对象和聚合函数原理解析
Nov 12 Python
如何创建一个Flask项目并进行简单配置
Nov 18 Python
Python爬虫之Selenium实现关闭浏览器
Dec 04 Python
Python基础数据类型tuple元组的概念与用法
Aug 02 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
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
php实例分享之二维数组排序
2014/05/15 PHP
php实现word转html的方法
2016/01/22 PHP
PHP MySql增删改查的简单实例
2016/06/21 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
利用vue + element实现表格分页和前端搜索的方法
2017/12/25 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
优雅地使用loading(推荐)
2019/04/20 Javascript
详解Vue 换肤方案验证
2019/08/28 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
Python中的jquery PyQuery库使用小结
2014/05/13 Python
打包发布Python模块的方法详解
2016/09/18 Python
基于pandas数据样本行列选取的方法
2018/04/20 Python
Python利用openpyxl库遍历Sheet的实例
2018/05/03 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
python制作简单五子棋游戏
2019/06/18 Python
TensorFlow获取加载模型中的全部张量名称代码
2020/02/11 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
浅析与CSS3的loading动画加载相关的transition优化
2015/05/18 HTML / CSS
秋季校运会广播稿100字
2014/09/18 职场文书
普通党员四风问题对照检查材料
2014/09/27 职场文书
郭明义电影观后感
2015/06/08 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
入团申请书格式
2019/06/20 职场文书