深入解析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程序设计入门(3)数组的使用
Jun 16 Python
python生成以及打开json、csv和txt文件的实例
Nov 16 Python
python+PyQT实现系统桌面时钟
Jun 16 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
Mar 27 Python
将python文件打包成EXE应用程序的方法
May 22 Python
python自动发微信监控报警
Sep 06 Python
Python之指数与E记法的区别详解
Nov 21 Python
python进程池实现的多进程文件夹copy器完整示例
Nov 27 Python
Python run()函数和start()函数的比较和差别介绍
May 03 Python
使用Python通过oBIX协议访问Niagara数据的示例
Dec 04 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
Dec 22 Python
python实现简单聊天功能
Jul 07 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
2019十大人气国漫
2020/03/13 国漫
php中mkdir函数用法实例分析
2014/11/15 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
繁简字转换功能
2006/07/19 Javascript
JavaScript 全角转半角部分
2009/10/28 Javascript
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
js简单实现调整网页字体大小的方法
2016/07/23 Javascript
jQuery+正则+文本框只能输入数字的实现方法
2016/10/07 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
JS优化与惰性载入函数实例分析
2017/04/06 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
浅谈JS中this在各个场景下的指向
2019/08/14 Javascript
自己编程中遇到的Python错误和解决方法汇总整理
2015/06/03 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
浅谈Python实现Apriori算法介绍
2017/12/20 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
详解python中的json和字典dict
2018/06/22 Python
python 实现A*算法的示例代码
2018/08/13 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
对Python3+gdal 读取tiff格式数据的实例讲解
2018/12/04 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
2020/06/24 Python
基于python实现操作redis及消息队列
2020/08/27 Python
css3实现3d旋转动画特效
2015/03/10 HTML / CSS
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
简历自我评价:教师师德表现自我评价
2019/04/24 职场文书
python3实现常见的排序算法(示例代码)
2021/07/04 Python