Python中list列表的一些进阶使用方法介绍
作者:老齐Py 发布时间:2023-12-24 10:31:47
判断一个 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')]


猜你喜欢
- static function convert($size) { &
- 这篇文章我们学习 Python 变量与数据类型变量变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念,变量可以通过变量名访问。在
- append()方法追加传递obj到现有的列表。语法以下是append()方法的语法:list.append(obj)参数&nb
- 前言最近在学习过程中需要用到pytorch框架,简单学习了一下,写了一个简单的案例,记录一下pytorch中搭建一个识别网络基础的东西。对应
- Numpy中提供了concatenate,append, stack类(包括hsatck、vstack、dstack、row_stack、c
- 概述前段时间突然发现,我之前对git stash的使用都是错误的。具体说来,我是这么使用的:在远端有新的提交,需要git pull来拉取合并
- 1.安装numpy进入python安装目录的lib下的site-packages文件夹下打开cmd输入pip install numpy下载
- 本文实例讲述了python列表操作之extend和append的区别。分享给大家供大家参考。具体如下:li = ['a',
- 在asp编程中,我们常常使用trim(rtrim ,ltrim)函数去掉一些数据的开头和结尾的空格,笔者最近写了一个asp聊天室,看到下面的
- 前言因为工作中不怎么使用python,所以对python的了解不够,只是在使用的时候才去学,在之前的几个例子中几乎没使用什么python的特
- 最近论坛里总有人问幻灯片怎么从数据库里取数据,花了几分钟简单的写了下。用到的人可以自己在细化<%dim rs,sqlset&
- matplotlib简介matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行
- 持续集成(CI)作业可以产生大量的数据。当作业失败时,找出了什么问题可能是一个繁琐的过程,需要对日志进行调查以发现根本原因-这通常是在作业总
- 本文将简单介绍四种获取对象的方法。假如有以下的类:class Person(object): def __init__(self, name
- 好多次在不同场合,都听到有同行提到“做产品比做设计更有前途”,或者“别做设计了,做产品吧”类似的观点。我不认为它们之间有什么可比性,因为这么
- # 配置vuex和在vue中相同,只是mpvue有一个坑,就是不能直接在new Vue的时候传入store。步骤:1.在src目录下新建一个
- 一、实验目的:1.掌握Python中柱状图、条形图绘图函数的使用2.利用上述绘图函数实现数据可视化二、实验内容:1.练习python中柱状图
- 切片是 Python 中最迷人最强大最 Amazing 的语言特性(几乎没有之一),在《Python进阶:切片的误区与高级用法》中,我介绍了
- 目录背景认识复合索引最左匹配原则字段顺序的影响复合索引可以替代单一索引吗?小结背景最近频繁出现慢SQL导致系统性能问题,于是决定针对索引进行
- 1:listWidget 以滚动窗口显示文件下的所有文件: self.listWidget = QtWidget