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 pickle模块用法实例
Apr 14 Python
使用Node.js和Socket.IO扩展Django的实时处理功能
Apr 20 Python
python Django模板的使用方法
Jan 14 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
Jun 27 Python
python实现遍历文件夹修改文件后缀
Aug 28 Python
PyQt5笔记之弹出窗口大全
Jun 20 Python
Django对数据库进行添加与更新的例子
Jul 12 Python
python实现本地批量ping多个IP的方法示例
Aug 07 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
Feb 29 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 Python
利用Python网络爬虫爬取各大音乐评论的代码
Apr 13 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
第十三节 对象串行化 [13]
2006/10/09 PHP
php 使用post,get的一种简洁方式
2010/04/25 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
php格式输出文件var_export函数实例
2014/11/15 PHP
smarty内置函数capture用法分析
2015/01/22 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
实现web打印的各种方法介绍及实现代码
2013/01/09 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
jQuery之ajax删除详解
2014/02/27 Javascript
js脚本实现数据去重
2014/11/27 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
vue.js实现照片放大功能
2020/06/23 Javascript
用vue设计一个日历表
2020/12/03 Vue.js
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python实现360的字符显示界面
2014/02/21 Python
Python 数据结构之旋转链表
2017/02/25 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
2018/01/09 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
多个python文件调用logging模块报错误
2020/02/12 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
浅析python函数式编程
2020/09/26 Python
用python读取xlsx文件
2020/12/17 Python
Python Spyder 调出缩进对齐线的操作
2021/02/26 Python
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
佳能英国官方网站:Canon UK
2017/08/08 全球购物
数组越界问题
2015/10/21 面试题
二审答辩状范文
2015/05/22 职场文书
大学生实习证明
2015/06/16 职场文书
导游词之江南周庄
2019/12/06 职场文书