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类属性与实例属性用法分析
May 09 Python
TensorFlow实现简单卷积神经网络
May 24 Python
Python实现模拟浏览器请求及会话保持操作示例
Jul 30 Python
win7+Python3.5下scrapy的安装方法
Jul 31 Python
20行python代码实现人脸识别
May 05 Python
python实现一行输入多个值和一行输出多个值的例子
Jul 16 Python
解决pyCharm中 module 调用失败的问题
Feb 12 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
Apr 22 Python
Python简单实现词云图代码及步骤解析
Jun 04 Python
Python map及filter函数使用方法解析
Aug 06 Python
如何基于python实现年会抽奖工具
Oct 20 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
Oct 26 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
对Session和Cookie的区分与解释
2007/03/16 PHP
又一个php 分页类实现代码
2009/12/03 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
JS OffsetParent属性深入解析
2014/01/13 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
微信小程序之自定义组件的实现代码(附源码)
2018/08/02 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
JS+CSS实现随机点名(实例代码)
2019/11/04 Javascript
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
python实现顺时针打印矩阵
2019/03/02 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
Python序列对象与String类型内置方法详解
2019/10/22 Python
python如何获取apk的packagename和activity
2020/01/10 Python
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
EJB的激活机制
2013/10/25 面试题
房地产销售大学生自我评价分享
2013/11/11 职场文书
争论的故事教学反思
2014/02/06 职场文书
刑事和解协议书范本
2014/11/19 职场文书
2015年学校工作总结范文
2015/04/20 职场文书
pytorch实现ResNet结构的实例代码
2021/05/17 Python
Python内置数据结构列表与元组示例详解
2021/08/04 Python
Nginx禁止ip访问或非法域名访问
2022/04/07 Servers