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 socket同步通信简单示例
Jun 07 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
Nov 09 Python
python清理子进程机制剖析
Nov 23 Python
解决DataFrame排序sort的问题
Jun 07 Python
分享Python切分字符串的一个不错方法
Dec 14 Python
对Python3 pyc 文件的使用详解
Feb 16 Python
Python基础之循环语句用法示例【for、while循环】
Mar 23 Python
Python动态语言与鸭子类型详解
Jul 01 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
python dict乱码如何解决
Jun 07 Python
使用Nibabel库对nii格式图像的读写操作
Jul 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+Mysql+jQuery实现动态展示信息
2011/10/08 PHP
php将字符串转化成date存入数据库的两种方式
2014/04/28 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
PHP中iconv函数知识汇总
2015/07/02 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
JQUERY复选框CHECKBOX全选,取消全选
2008/08/30 Javascript
使用jQuery插件创建常规模态窗口登陆效果
2013/08/23 Javascript
js中array的sort()方法使用介绍
2014/02/20 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
2015/03/04 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
2015/11/23 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
bootstrap datepicker插件默认英文修改为中文
2017/07/28 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
微信小程序实现手指触摸画板
2018/07/09 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
Python实现简单的四则运算计算器
2016/11/02 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
python文件排序的方法总结
2020/09/13 Python
详解selenium + chromedriver 被反爬的解决方法
2020/10/28 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
css3.0 图形构成实例练习一
2013/03/19 HTML / CSS
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
EJB的角色和三个对象
2015/12/31 面试题
商务英语本科生的自我评价分享
2013/11/15 职场文书
大学生文员专业个人求职信范文
2014/01/05 职场文书
保护野生动物倡议书
2014/05/16 职场文书
创业计划书之寿司
2019/07/19 职场文书
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python
mysql中varchar类型的日期进行比较、排序等操作的实现
2021/11/17 MySQL
Vue全局事件总线你了解吗
2022/02/24 Vue.js
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android