深入解析Python中的list列表及其切片和迭代操作


Posted in Python onMarch 13, 2016

有序列表list

>>> listTest = ['ha','test','yes']
>>> listTest
['ha', 'test', 'yes']

len()获取list元素个数。

>>> len(listTest)
3

可以用索引来访问每一个元素,0表示第一个,-1还可以表示最后一个,即倒数第一个,依此类推-2表示倒数第二个,超过了也会报越界错误。

>>> listTest[0]
'ha'
>>> listTest[1]
'test'
>>> listTest[3]
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> listTest[-1]
'yes'
>>> listTest[-2]
'test'

也可以把元素插入到指定的位置,比如索引号为1的位置:

>>> listTest.insert(1,'jack')
>>> listTest
['ha', 'jack', 'test', 'yes']

删除末尾元素,用pop()方法,添加到末尾用append():

>>> list
['ha', 'jack', 'test', 'yes']
>>> listTest.pop()
'yes'
>>> listTest
['ha', 'jack', 'test']

删除指定位置的元素,用pop(i)方法,其中i是索引位置:

>>> listTest
['ha', 'jack', 'test']
>>> listTest.pop(1)
'jack'
>>> listTest
['ha', 'test']

把某个元素替换,直接赋值即可,并且类型也可以不同:

>>> listTest
['ha', 'test']
>>> listTest[1] = 'debug'
>>> listTest
['ha', 'debug']
>>> listTest[1] = 123
>>> listTest
['ha', 123]

list也可以嵌套:

>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> len(s)
4
>>> s[1]
'java'
>>> s[2]
['asp', 'php']
>>> s[2][1]
'php'

空的list:

>>> L = []
>>> len(L)
0


不可变列表tuple
另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。

>>> classmates = ('Michael', 'Bob', 'Tracy')
>>> classmates
('Michael', 'Bob', 'Tracy')
>>> classmates[1]
'Bob'

注意:由于tuple不可变,所以代码更安全,如果可能,能用tuple代替list就尽量用tuple。
tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,比如:

>>> t = (1, 2)
>>> t
(1, 2)

如果要定义一个空的tuple,可以写成():

>>> t = ()
>>> t
()

但是,要定义一个只有1个元素的tuple,如果你这么定义:

>>> t = (1)
>>> t
1

定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。
所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:

>>> t = (1,)
>>> t
(1,)

Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号。
最后来看一个可变的tuple:

>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

注意:tuple所谓的不变是说,tuple的每个元素,指向永远不变。

切片
取一个list或tuple中的部分元素,当然其他语言,例如java也可以使用截取函数,传入区间进行截取,但是Python提供了一个更简单的操作

>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
>>> L[0:3]
['Michael', 'Sarah', 'Tracy']

注意,3表示的不是截取的元素个数,而是索引结束位置,即不包括索引为3的元素,如果开始索引为0,还可以省略

>>> L[1:3]
['Sarah', 'Tracy']
>>> L[:3]
['Michael', 'Sarah', 'Tracy']

前面也提到过,Python取元素还支持L[-1]这种取倒数第一个元素的操作

>>> L[-2:]
['Bob', 'Jack']
>>> L[-2:-1]
['Bob']

L[:],这个表示复制一个list,其实就是默认把整个list切片。

迭代
这个和Java也差不多,在Java中也有迭代器以及foreach(element: elements)这种循环语句,在Python中,使用for ... in。

>>> for ch in 'abc':
...   print ch
... 
a
b
c

默认情况下,dict通过key迭代。也可以通过value来迭代:for value in d.itervalues()。也可以同时迭代key和value:for k, v in d.iteritems()。
所以,只要判断一个对象是可迭代对象就可以使用for ... in这种循环,通过collections模块的Iterable类型判断:

>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False

有时候也需要里列表里的下标,这点Python也提供了一个内置的enumerate函数,可以把一个list变成索引-元素对,这样就可以做到在for循环中迭代索引和元素本身。

>>> for i, value in enumerate(['A', 'B', 'C']):
...   print i, value
... 
0 A
1 B
2 C

还可以同时引用两个变量

>>> for x, y in [(1, 1), (2, 4), (3, 9)]:
...   print x, y
...
1 1
2 4
3 9
Python 相关文章推荐
Python入门篇之文件
Oct 20 Python
Python简明入门教程
Aug 04 Python
Python利用Nagios增加微信报警通知的功能
Feb 18 Python
深入解析Python中的list列表及其切片和迭代操作
Mar 13 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
python实现远程通过网络邮件控制计算机重启或关机
Feb 22 Python
python可视化实现KNN算法
Oct 16 Python
python编写俄罗斯方块
Mar 13 Python
python实现贪吃蛇游戏源码
Mar 21 Python
jupyter notebook参数化运行python方式
Apr 10 Python
Python实现一个优先级队列的方法
Jul 31 Python
Pytorch之扩充tensor的操作
Mar 04 Python
Python中的列表生成式与生成器学习教程
Mar 13 #Python
jupyter安装小结
Mar 13 #Python
Ubuntu下安装PyV8
Mar 13 #Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 #Python
深入讲解Python函数中参数的使用及默认参数的陷阱
Mar 13 #Python
编写Python小程序来统计测试脚本的关键字
Mar 12 #Python
使用Python内置的模块与函数进行不同进制的数的转换
Mar 12 #Python
You might like
WML,Apache,和 PHP 的介绍
2006/10/09 PHP
使用 eAccelerator加速PHP代码的方法
2007/09/30 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
PHP执行shell脚本运行程序不产生core文件的方法
2016/12/28 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
HTML中事件触发列表与解说
2007/07/09 Javascript
FormValidate 表单验证功能代码更新并提供下载
2008/08/23 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
[15:20]DOTA2亚洲邀请赛总决赛开幕式表演:羽泉献唱
2017/04/05 DOTA
python实现的文件同步服务器实例
2015/06/02 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
python 巧用正则寻找字符串中的特定字符的位置方法
2018/05/02 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
深入理解Django-Signals信号量
2019/02/19 Python
python实现矩阵和array数组之间的转换
2019/11/29 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
说出你对remoting 和webservice的理解和应用
2014/06/08 面试题
平面设计求职信
2014/03/10 职场文书
低碳环保标语
2014/06/12 职场文书
个人借款协议书范本
2014/11/17 职场文书
工厂仓库管理员岗位职责
2015/04/09 职场文书
红高粱观后感
2015/06/10 职场文书
八年级数学教学反思
2016/02/17 职场文书
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers