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通过floor函数舍弃小数位的方法
Mar 17 Python
python实现文件路径和url相互转换的方法
Jul 06 Python
python的unittest测试类代码实例
Dec 07 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 Python
Python的iOS自动化打包实例代码
Nov 22 Python
500行Python代码打造刷脸考勤系统
Jun 03 Python
Python编写带选项的命令行程序方法
Aug 13 Python
python列表插入append(), extend(), insert()用法详解
Sep 14 Python
python中从for循环延申到推导式的具体使用
Nov 29 Python
python 检查数据中是否有缺失值,删除缺失值的方式
Dec 02 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
Python cookie的保存与读取、SSL讲解
Feb 17 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 中文处理技巧
2010/04/25 PHP
php设计模式 Proxy (代理模式)
2011/06/26 PHP
PHP无法访问远程mysql的问题分析及解决
2013/05/16 PHP
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
php mysql 封装类实例代码
2016/09/18 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
轻松实现jquery手风琴效果
2016/01/14 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
node.js中axios使用心得总结
2017/11/29 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
使用Scrapy爬取动态数据
2018/10/21 Python
Python判断有效的数独算法示例
2019/02/23 Python
python3人脸识别的两种方法
2019/04/25 Python
将python运行结果保存至本地文件中的示例讲解
2019/07/11 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
关于Python错误重试方法总结
2021/01/03 Python
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
斯洛伐克最大的婴儿食品和用品网上商店:Feedo.sk
2020/12/21 全球购物
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
工作会议主持词
2014/03/17 职场文书
企业精神口号
2014/06/11 职场文书
污水处理保证书
2015/05/09 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python
JavaScript实例 ODO List分析
2022/01/22 Javascript
Redis高可用集群redis-cluster详解
2022/03/20 Redis