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操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
Jul 11 Python
Django学习笔记之ORM基础教程
Mar 27 Python
对numpy中数组元素的统一赋值实例
Apr 04 Python
pandas获取groupby分组里最大值所在的行方法
Apr 20 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
Jul 26 Python
Python单元和文档测试实例详解
Apr 11 Python
使用Python进行体育竞技分析(预测球队成绩)
May 16 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
Dec 19 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
Dec 19 Python
Python requests获取网页常用方法解析
Feb 20 Python
Python startswith()和endswith() 方法原理解析
Apr 28 Python
Python爬虫基于lxml解决数据编码乱码问题
Jul 31 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
thinkphp浏览历史功能实现方法
2014/10/29 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
PHP chr()函数讲解
2019/02/11 PHP
Firefox outerHTML实现代码
2009/06/04 Javascript
jquery 模拟雅虎首页的点击对话框效果
2010/04/11 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
javascript实现倒计时跳转页面
2016/01/17 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
2017/04/13 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
Node.js 基础教程之全局对象
2017/08/06 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
Python的多态性实例分析
2015/07/07 Python
python 中pyqt5 树节点点击实现多窗口切换问题
2019/07/04 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
python3 中时间戳、时间、日期的转换和加减操作
2020/07/14 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
怎样写好自我鉴定
2013/12/04 职场文书
个人收入证明范本
2014/01/12 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
国王的演讲观后感
2015/06/03 职场文书
能让Python提速超40倍的神器Cython详解
2021/06/24 Python
python文件与路径操作神器 pathlib
2022/04/01 Python
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js