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使用ctypes模块调用windowsapi获取系统版本示例
Apr 17 Python
Python 中的with关键字使用详解
Sep 11 Python
Python实现PS图像明亮度调整效果示例
Jan 23 Python
解决nohup重定向python输出到文件不成功的问题
May 11 Python
pandas 对每一列数据进行标准化的方法
Jun 09 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
Feb 20 Python
pycharm设置python文件模板信息过程图解
Mar 10 Python
Python configparser模块操作代码实例
Jun 08 Python
Python 字典中的所有方法及用法
Jun 10 Python
Python 连接 MySQL 的几种方法
Sep 09 Python
python和C++共享内存传输图像的示例
Oct 27 Python
Linux系统下升级pip的完整步骤
Jan 31 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
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
2010/10/15 Javascript
js中获取事件对象的方法小结
2011/03/13 Javascript
js setTimeout()函数介绍及应用以倒计时为例
2013/12/12 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
2019/05/15 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
JS实现简易计算器
2020/02/14 Javascript
python多线程操作实例
2014/11/21 Python
python开发之tkinter实现图形随鼠标移动的方法
2015/11/11 Python
python类中super()和__init__()的区别
2016/10/18 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
Python日期时间Time模块实例详解
2019/04/15 Python
Python编程实现tail-n查看日志文件的方法
2019/07/08 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
Python3 集合set入门基础
2020/02/10 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
python中scipy.stats产生随机数实例讲解
2021/02/19 Python
Ray-Ban雷朋太阳眼镜英国官网:Ray-Ban UK
2019/11/23 全球购物
渗透攻击的测试步骤
2014/06/07 面试题
护士的岗位职责
2013/12/04 职场文书
高中美术教学反思
2014/01/19 职场文书
如何写好优秀的创业计划书
2014/01/30 职场文书
大二自我鉴定
2014/01/31 职场文书
幼儿园植树节活动总结
2014/07/04 职场文书
房屋租赁授权委托书范本
2014/09/20 职场文书
运动会运动员赞词
2015/07/22 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
Nginx进程管理和重载原理详解
2021/04/22 Servers