深入解析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控制台英汉汉英电子词典
Apr 23 Python
Python3 能振兴 Python的原因分析
Nov 28 Python
详解Python网络爬虫功能的基本写法
Jan 28 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
Nov 29 Python
python的re正则表达式实例代码
Jan 24 Python
Django中url的反向查询的方法
Mar 14 Python
python中的turtle库函数简单使用教程
Jul 23 Python
Pandas Shift函数的基础入门学习笔记
Nov 16 Python
Python PIL图片添加字体的例子
Aug 22 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
Feb 06 Python
上帝为你开了一扇窗之Tkinter常用函数详解
Jun 02 Python
Python中字符串对象语法分享
Feb 24 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
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
2014/05/10 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
通过ifame指向的页面高度调整iframe的高度
2006/10/05 Javascript
jquery 查找新建元素代码
2010/07/06 Javascript
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
jQuery超简单遮罩层实现方法示例
2018/09/06 jQuery
在微信小程序中保存网络图片
2019/02/12 Javascript
VUE实现移动端列表筛选功能
2019/08/23 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
Centos5.x下升级python到python2.7版本教程
2015/02/14 Python
Python selenium文件上传方法汇总
2020/11/19 Python
Python中的连接符(+、+=)示例详解
2017/01/13 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
python实现读Excel写入.txt的方法
2018/04/29 Python
使用matplotlib画散点图的方法
2018/05/25 Python
一百多行python代码实现抢票助手
2018/09/25 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
python、Matlab求定积分的实现
2019/11/20 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
python读取配置文件方式(ini、yaml、xml)
2020/04/09 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
校园门卫岗位职责
2013/12/09 职场文书
纪念建党演讲稿范文
2014/01/13 职场文书
简历上的自我评价
2014/02/03 职场文书
2015年工会工作总结
2015/03/30 职场文书
vue2实现provide inject传递响应式
2021/05/21 Vue.js
Python+Tkinter制作专属图形化界面
2022/04/01 Python
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python