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 SQLite3数据库操作类分享
Jun 10 Python
python 类详解及简单实例
Mar 24 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
Jul 06 Python
简单了解OpenCV是个什么东西
Nov 10 Python
100行python代码实现跳一跳辅助程序
Jan 15 Python
numpy的文件存储.npy .npz 文件详解
Jul 09 Python
python 异或加密字符串的实例
Oct 14 Python
Python异步操作MySQL示例【使用aiomysql】
May 16 Python
浅谈Pytorch中的torch.gather函数的含义
Aug 18 Python
Python中关于浮点数的冷知识
Sep 22 Python
Python for循环及基础用法详解
Nov 08 Python
python 实现一个简单的线性回归案例
Dec 17 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中定义网站根目录的常用方法
2010/08/08 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
php支付宝在线支付接口开发教程
2016/09/19 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
Prototype使用指南之enumerable.js
2007/01/10 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
通过js动态操作table(新增,删除相关列信息)
2012/05/23 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
bootstrap-Treeview实现级联勾选
2017/11/23 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
JavaScript引用类型Array实例分析
2018/07/24 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
Python列表切片用法示例
2017/04/19 Python
Python使用装饰器进行django开发实例代码
2018/02/06 Python
详解Python发送email的三种方式
2018/10/18 Python
python中实现控制小数点位数的方法
2019/01/24 Python
Python爬虫运用正则表达式的方法和优缺点
2019/08/25 Python
python实现KNN分类算法
2019/10/16 Python
简单介绍CSS3中Media Query的使用
2015/07/07 HTML / CSS
html5的canvas方法使用指南
2014/12/15 HTML / CSS
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
美国网上书店:Barnes & Noble
2018/08/15 全球购物
.net面试题
2016/09/17 面试题
一句话工作感言
2014/03/01 职场文书
学校献爱心活动总结
2014/07/08 职场文书
雷锋式好少年事迹材料
2014/08/17 职场文书
单位作风建设剖析材料
2014/10/11 职场文书
婚宴来宾致辞
2015/07/28 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
导游词之绍兴柯岩古镇
2020/01/09 职场文书
python3操作redis实现List列表实例
2021/08/04 Python