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实现学生管理系统
Jan 11 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
Jun 28 Python
在Python中通过getattr获取对象引用的方法
Jan 21 Python
浅谈Python中eval的强大与危害
Mar 13 Python
Python零基础入门学习之输入与输出
Apr 03 Python
Windows系统Python直接调用C++ DLL的方法
Aug 01 Python
Linux下升级安装python3.8并配置pip及yum的教程
Jan 02 Python
Python+OpenCV实现旋转文本校正方式
Jan 09 Python
tensorflow 查看梯度方式
Feb 04 Python
解决Python图形界面中设置尺寸的问题
Mar 05 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
树莓派升级python的具体步骤
Jul 05 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 文件上传源码分析(RFC1867)
2009/10/30 PHP
PHP及Zend Engine的线程安全模型分析
2011/11/10 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
2013/02/28 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
php表单提交与$_POST实例分析
2015/01/26 PHP
smarty模板数学运算示例
2016/12/11 PHP
PDO::errorInfo讲解
2019/01/28 PHP
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
JS分页控件 可用于无刷新分页
2013/07/23 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
js ajaxfileupload.js上传报错的解决方法
2016/05/05 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
2017/06/09 jQuery
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
nodejs实现超简单生成二维码的方法
2018/03/17 NodeJs
微信小程序实现底部导航
2018/11/05 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
JavaScript组合模式---引入案例分析
2020/05/23 Javascript
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
Python双精度浮点数运算并分行显示操作示例
2017/07/21 Python
Python中pillow知识点学习
2018/04/30 Python
python 文件转成16进制数组的实例
2018/07/09 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
Python3分析处理声音数据的例子
2019/08/27 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
Java byte数组操纵方式代码实例解析
2020/07/22 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
轻金属冶金专业毕业生自荐信
2013/11/02 职场文书
管理科学大学生求职信
2013/11/13 职场文书
高三自我评价
2014/02/01 职场文书
2016新年慰问信范文
2015/03/25 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js