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 15 Python
Python中threading模块join函数用法实例分析
Jun 04 Python
微信跳一跳小游戏python脚本
Jan 05 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
May 21 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
Feb 22 Python
Python pandas.DataFrame 找出有空值的行
Sep 09 Python
python使用socket 先读取长度,在读取报文内容示例
Sep 26 Python
Pytorch to(device)用法
Jan 08 Python
Python爬虫之爬取淘女郎照片示例详解
Jul 28 Python
Python之京东商品秒杀的实现示例
Jan 06 Python
pandas取dataframe特定行列的实现方法
May 24 Python
浅析Python中的套接字编程
Jun 22 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作的文本留言本的例子(三)
2006/10/09 PHP
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
Laravel 5框架学习之Eloquent 关系
2015/04/09 PHP
Symfony学习十分钟入门经典教程
2016/02/03 PHP
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
详解js删除数组中的指定元素
2018/10/31 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
解决layui下拉框监听问题(监听不到值的变化)
2019/09/28 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
JavaScript实现10秒后再次获取验证码
2020/12/02 Javascript
跟老齐学Python之list和str比较
2014/09/20 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
django框架之cookie/session的使用示例(小结)
2018/10/15 Python
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
试述DBMS的主要功能
2016/11/13 面试题
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
年终自我鉴定
2013/10/09 职场文书
广告设计专业自荐信范文
2013/11/14 职场文书
消防安全员岗位职责
2014/03/10 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
优秀大学生自荐信
2015/03/26 职场文书
学术会议通知
2015/04/15 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python
python代码实现备忘录案例讲解
2021/07/26 Python