Python中Collection的使用小技巧


Posted in Python onAugust 18, 2014

本文所述实例来自独立软件开发者 Alex Marandon,在他的博客中曾介绍了数个关于 Python Collection 的实用小技巧,在此与大家分享。供大家学习借鉴之用。具体如下:

1.判断一个 list 是否为空

传统的方式:

if len(mylist):
  # Do something with my list
else:
  # The list is empty

由于一个空 list 本身等同于 False,所以可以直接:

if mylist:
  # Do something with my list
else:
  # The list is empty

2.遍历 list 的同时获取索引

传统的方式:

i = 0
for element in mylist:
  # Do something with i and element
  i += 1

这样更简洁些:

for i, element in enumerate(mylist):
  # Do something with i and element
  pass

3.list 排序

在包含某元素的列表中依据某个属性排序是一个很常见的操作。例如这里我们先创建一个包含 person 的 list:

class Person(object):
  def __init__(self, age):
    self.age = age
 
persons = [Person(age) for age in (14, 78, 42)]

传统的方式是:

def get_sort_key(element):
  return element.age
 
for element in sorted(persons, key=get_sort_key):
  print "Age:", element.age

更加简洁、可读性更好的方法是使用 Python 标准库中的 operator 模块:

from operator import attrgetter
 
for element in sorted(persons, key=attrgetter('age')):
  print "Age:", element.age

attrgetter 方法优先返回读取的属性值作为参数传递给 sorted 方法。operator 模块还包括 itemgetter 和 methodcaller 方法,作用如其字面含义。

4.在 Dictionary 中元素分组

和上面类似,先创建 Persons:

class Person(object):
  def __init__(self, age):
    self.age = age
 
persons = [Person(age) for age in (78, 14, 78, 42, 14)]

如果现在我们要按照年龄分组的话,一种方法是使用 in 操作符:

persons_by_age = {}
 
for person in persons:
  age = person.age
  if age in persons_by_age:
    persons_by_age[age].append(person)
  else:
    persons_by_age[age] = [person]
 
assert len(persons_by_age[78]) == 2

相比较之下,使用 collections 模块中 defaultdict 方法的途径可读性更好:

from collections import defaultdict
 
persons_by_age = defaultdict(list)
 
for person in persons:
  persons_by_age[person.age].append(person)

defaultdict 将会利用接受的参数为每个不存在的 key 创建对应的值,这里我们传递的是 list,所以它将为每个 key 创建一个 list 类型的值。

本文示例仅为程序框架,具体功能还需要读者根据自身应用环境加以完善。希望本文所述实例对大家学习Python能起到一定的帮助作用。

Python 相关文章推荐
python 实现堆排序算法代码
Jun 05 Python
Python实现的几个常用排序算法实例
Jun 16 Python
python 远程统计文件代码分享
May 14 Python
Python中字典和集合学习小结
Jul 07 Python
python解析html提取数据,并生成word文档实例解析
Jan 22 Python
Python 统计字数的思路详解
May 08 Python
python中的for循环
Sep 28 Python
python多环境切换及pyenv使用过程详解
Sep 27 Python
Python 识别12306图片验证码物品的实现示例
Jan 20 Python
Python 从attribute到property详解
Mar 05 Python
pyqt5 QlistView列表显示的实现示例
Mar 24 Python
Python爬虫数据的分类及json数据使用小结
Mar 29 Python
Python实现3行代码解简单的一元一次方程
Aug 18 #Python
Python统计列表中的重复项出现的次数的方法
Aug 18 #Python
Python中无限元素列表的实现方法
Aug 18 #Python
Python中实现字符串类型与字典类型相互转换的方法
Aug 18 #Python
Python命名空间详解
Aug 18 #Python
Python判断变量是否已经定义的方法
Aug 18 #Python
Python实现全角半角转换的方法
Aug 18 #Python
You might like
PHP个人网站架设连环讲(三)
2006/10/09 PHP
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
JavaScript 基础问答三
2008/12/03 Javascript
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
浅析Node.js:DNS模块的使用
2016/11/23 Javascript
js制作简单的音乐播放器的示例代码
2017/08/28 Javascript
JavaScript中EventLoop介绍
2018/01/22 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
python实现web方式logview的方法
2015/08/10 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
2019/08/23 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
python 实现客户端与服务端的通信
2020/12/23 Python
使用HTML5 Geolocation实现一个距离追踪器
2018/04/09 HTML / CSS
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
党员志愿者活动总结
2014/06/26 职场文书
小学庆六一活动总结
2014/08/28 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
2015秋季幼儿园开学通知
2015/07/16 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
普希金的诗歌赏析(3首)
2019/08/20 职场文书
JavaScript文档对象模型DOM
2021/11/20 Javascript