Python中list列表的一些进阶使用方法介绍


Posted in Python onAugust 15, 2015

判断一个 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

遍历 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

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 方法,作用如其字面含义。

list解析

python有一个非常有意思的功能,就是list解析,就是这样的:

>>> squares = [x**2 for x in range(1,10)]
>>> squares
[1, 4, 9, 16, 25, 36, 49, 64, 81]

看到这个结果,看官还不惊叹吗?这就是python,追求简洁优雅的python!

其官方文档中有这样一段描述,道出了list解析的真谛:

    List comprehensions provide a concise way to create lists. Common applications are to make new lists where each element is the result of some operations applied to each member of another sequence or iterable, or to create a subsequence of those elements that satisfy a certain condition.

还记得前面一讲中的那个问题吗?

    找出100以内的能够被3整除的正整数。

我们用的方法是:

aliquot = []

for n in range(1,100):
  if n%3 == 0:
    aliquot.append(n)

print aliquot

好了。现在用list解析重写,会是这样的:

>>> aliquot = [n for n in range(1,100) if n%3==0]
>>> aliquot
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]

震撼了。绝对牛X!

其实,不仅仅对数字组成的list,所有的都可以如此操作。请在平复了激动的心之后,默默地看下面的代码,感悟一下list解析的魅力。

>>> mybag = [' glass',' apple','green leaf ']  #有的前面有空格,有的后面有空格
>>> [one.strip() for one in mybag]       #去掉元素前后的空格
['glass', 'apple', 'green leaf']

enumerate

这是一个有意思的内置函数,本来我们可以通过for i in range(len(list))的方式得到一个list的每个元素编号,然后在用list[i]的方式得到该元素。如果要同时得到元素编号和元素怎么办?就是这样了:

>>> for i in range(len(week)):
...   print week[i]+' is '+str(i)   #注意,i是int类型,如果和前面的用+连接,必须是str类型
... 
monday is 0
sunday is 1
friday is 2

python中提供了一个内置函数enumerate,能够实现类似的功能

>>> for (i,day) in enumerate(week):
...   print day+' is '+str(i)
... 
monday is 0
sunday is 1
friday is 2

算是一个有意思的内置函数了,主要是提供一个简单快捷的方法。

官方文档是这么说的:

    Return an enumerate object. sequence must be a sequence, an iterator, or some other object which supports iteration. The next() method of the iterator returned by enumerate() returns a tuple containing a count (from start which defaults to 0) and the values obtained from iterating over sequence:

顺便抄录几个例子,供看官欣赏,最好实验一下。

>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
Python 相关文章推荐
Python中字符串的常见操作技巧总结
Jul 28 Python
详解Django解决ajax跨域访问问题
Aug 24 Python
python使用rpc框架gRPC的方法
Aug 24 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
Django如何简单快速实现PUT、DELETE方法
Jul 24 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
Aug 02 Python
使用python制作一个解压缩软件
Nov 13 Python
python实现名片管理器的示例代码
Dec 17 Python
Python如何获取Win7,Win10系统缩放大小
Jan 10 Python
PyTorch 如何设置随机数种子使结果可复现
May 12 Python
python如何利用cv2模块读取显示保存图片
Jun 04 Python
python 离散点图画法的实现
Apr 01 Python
Python中的super()方法使用简介
Aug 14 #Python
在Python中使用正则表达式的方法
Aug 13 #Python
简单讲解Python中的闭包
Aug 11 #Python
Python实现短网址ShortUrl的Hash运算实例讲解
Aug 10 #Python
python实现web方式logview的方法
Aug 10 #Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 #Python
python用10行代码实现对黄色图片的检测功能
Aug 10 #Python
You might like
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
PHP 替换模板变量实现步骤
2009/08/24 PHP
使用PHP求两个文件的相对路径
2013/06/20 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
基于jquery的网页SELECT下拉框美化代码
2010/10/28 Javascript
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
等待指定时间后自动跳转或关闭当前页面的js代码
2013/07/09 Javascript
flash遮住div问题的正确解决方法
2014/02/27 Javascript
响应式表格之固定表头的简单实现
2016/08/26 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
Angular实现跨域(搜索框的下拉列表)
2017/02/16 Javascript
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
理解python正则表达式
2016/01/15 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
2018/04/26 Python
python爬取网页转换为PDF文件
2018/06/07 Python
Python常用的json标准库
2019/02/19 Python
python的常见矩阵运算(小结)
2019/08/07 Python
Python enumerate内置库用法解析
2020/02/24 Python
Django如何批量创建Model
2020/09/01 Python
python实现简单的五子棋游戏
2020/09/01 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
给分销商的致歉信
2014/01/14 职场文书
成功的餐厅经营创业计划书
2014/01/15 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
兵马俑的导游词
2015/02/02 职场文书
2015年国际护士节演讲稿
2015/03/18 职场文书
2015年领班工作总结
2015/04/29 职场文书
初中思品教学反思
2016/02/20 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript