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 相关文章推荐
socket + select 完成伪并发操作的实例
Aug 15 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
Feb 05 Python
python 将字符串转换成字典dict的各种方式总结
Mar 23 Python
python实现对求解最长回文子串的动态规划算法
Jun 02 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
Jul 10 Python
详解【python】str与json类型转换
Apr 29 Python
分享8个非常流行的 Python 可视化工具包
Jun 05 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 Python
Python图像处理库PIL的ImageGrab模块介绍详解
Feb 26 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 Python
python 爬取豆瓣网页的示例
Apr 13 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实现多进程并行执行脚本
2013/06/18 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
基于JavaScript实现随机颜色输入框
2016/12/10 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
vue实现单选和多选功能
2017/08/11 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
2020/03/10 Javascript
ant design vue导航菜单与路由配置操作
2020/10/28 Javascript
Python实现扫描指定目录下的子目录及文件的方法
2014/07/16 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
Python 爬取携程所有机票的实例代码
2018/06/11 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
如何使用python代码操作git代码
2020/02/29 Python
Python网页解析器使用实例详解
2020/05/30 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
Python魔术方法专题
2020/06/19 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
小学班主任寄语大全
2014/04/04 职场文书
党员服务承诺书
2014/05/28 职场文书
暑期培训班策划方案
2014/08/26 职场文书
普宁寺导游词
2015/02/04 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
公司员工体检通知
2015/04/21 职场文书
PC版《死亡搁浅导剪版》现已发售 展开全新的探险
2022/04/03 其他游戏
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android