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 相关文章推荐
linux下python抓屏实现方法
May 22 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
Nov 11 Python
Python实现k-means算法
Feb 23 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
Jul 19 Python
python从zip中删除指定后缀文件(推荐)
Dec 05 Python
在tensorflow中设置保存checkpoint的最大数量实例
Jan 21 Python
Django单元测试中Fixtures用法详解
Feb 25 Python
Python对象的属性访问过程详解
Mar 05 Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 Python
python 实现德洛内三角剖分的操作
Apr 22 Python
python数字图像处理实现图像的形变与缩放
Jun 28 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 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和Bootstrap结合打造个性的分页样式(推荐)
2016/08/01 PHP
PHP实现简易blog的制作
2016/10/24 PHP
[IE&FireFox兼容]JS对select操作
2007/01/07 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
jQuery版本升级踩坑大全
2016/01/12 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
AngularJS学习笔记之依赖注入详解
2016/05/16 Javascript
简单实现js无缝滚动效果
2017/02/05 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
nodejs搭建本地服务器并访问文件操作示例
2019/05/11 NodeJs
微信小程序的线程架构【推荐】
2019/05/14 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
js实现扫雷源代码
2020/11/27 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
Python中title()方法的使用简介
2015/05/20 Python
Python中threading模块join函数用法实例分析
2015/06/04 Python
浅谈Python中函数的参数传递
2016/06/21 Python
Python将多份excel表格整理成一份表格
2018/01/03 Python
python中的常量和变量代码详解
2018/07/25 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
Django框架安装方法图文详解
2019/11/04 Python
Python 读取有公式cell的结果内容实例方法
2020/02/17 Python
Python数组并集交集补集代码实例
2020/02/18 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
2021/03/03 Python
环保专业大学生职业规划设计
2014/01/10 职场文书
党员干部承诺书范文
2014/03/25 职场文书
供货协议书范本
2014/04/22 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS