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读写ini文件示例(python读写文件)
Mar 25 Python
python进程管理工具supervisor使用实例
Sep 17 Python
使用Pyrex来扩展和加速Python程序的教程
Apr 13 Python
教大家使用Python SqlAlchemy
Feb 12 Python
Python实现网站注册验证码生成类
Jun 08 Python
python中比较两个列表的实例方法
Jul 04 Python
使用Python自动生成HTML的方法示例
Aug 06 Python
Python内置加密模块用法解析
Nov 25 Python
matlab中imadjust函数的作用及应用举例
Feb 27 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
Mar 12 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 Python
理解Django 中Call Stack机制的小Demo
Sep 01 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中的函数嵌套层数限制分析
2011/06/13 PHP
简单的php中文转拼音的实现代码
2014/02/11 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
JavaScript 变量命名规则
2009/09/23 Javascript
ajax与302响应代码测试
2013/10/23 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
由ReactJS的Hello world说开来
2015/07/02 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
Javascript 闭包详解及实例代码
2016/11/30 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
AngularJS中的作用域实例分析
2018/05/16 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
python中将字典转换成其json字符串
2014/07/16 Python
代码分析Python地图坐标转换
2018/02/08 Python
我用Python抓取了7000 多本电子书案例详解
2019/03/25 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
纯CSS3实现8组超炫酷鼠标滑过图片动画
2016/03/16 HTML / CSS
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
服装厂厂长职责
2013/12/16 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
社区党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
档案工作个人总结
2015/03/03 职场文书
教师节寄语2015
2015/03/23 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书
九年级数学教学反思
2016/02/17 职场文书
python某漫画app逆向
2021/03/31 Python
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS