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 相关文章推荐
Python3基础之输入和输出实例分析
Aug 18 Python
Python中的匿名函数使用简介
Apr 27 Python
Python中的集合类型知识讲解
Aug 19 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
Jun 02 Python
用yum安装MySQLdb模块的步骤方法
Dec 15 Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 Python
基于scrapy的redis安装和配置方法
Jun 13 Python
Python使用combinations实现排列组合的方法
Nov 13 Python
图文详解python安装Scrapy框架步骤
May 20 Python
python logging.info在终端没输出的解决
May 12 Python
python os模块常用的29种方法使用详解
Jun 02 Python
Python使用socketServer包搭建简易服务器过程详解
Jun 12 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 xml留言板 xml存储数据的简单例子
2009/08/24 PHP
写出高质量的PHP程序
2012/02/04 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
PHP正则验证Email的方法
2015/06/15 PHP
PHP控制反转(IOC)和依赖注入(DI)
2017/03/13 PHP
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
js精度溢出解决方案
2012/12/02 Javascript
js 数组去重的四种实用方法
2014/09/09 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
2016/06/06 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
jQuery序列化后的表单值转换成Json
2017/06/16 jQuery
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
小试SVG之新手小白入门教程
2019/01/08 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
2020/03/26 Javascript
js代码实现轮播图
2020/05/04 Javascript
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
在Python中使用Neo4j数据库的教程
2015/04/16 Python
python3+PyQt5实现自定义流体混合窗口部件
2018/04/24 Python
Tensorflow累加的实现案例
2020/02/05 Python
html5 input输入实时检测以及延时优化
2018/07/18 HTML / CSS
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
希腊香水和化妆品购物网站:Parfimo.gr
2019/10/03 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
任命书格式
2014/06/05 职场文书
党员目标管理责任书
2014/07/25 职场文书
国际贸易系求职信
2014/08/09 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
购房委托书范本
2014/09/18 职场文书
2015法院个人工作总结范文
2015/05/25 职场文书
文化大革命观后感
2015/06/17 职场文书