深入解析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遍历指定城市的一周气温
Mar 31 Python
Python使用回溯法子集树模板解决迷宫问题示例
Sep 01 Python
Python实现生成随机数据插入mysql数据库的方法
Dec 25 Python
名片管理系统python版
Jan 11 Python
Python网络爬虫中的同步与异步示例详解
Feb 03 Python
Python中zip()函数的简单用法举例
Sep 02 Python
flask 实现token机制的示例代码
Nov 07 Python
python模块hashlib(加密服务)知识点讲解
Nov 25 Python
Pytorch DataLoader 变长数据处理方式
Jan 08 Python
Python模块 _winreg操作注册表
Feb 05 Python
【超详细】八大排序算法的各项比较以及各自特点
Mar 31 Python
浅谈Python3中datetime不同时区转换介绍与踩坑
Aug 02 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
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
laravel withCount 统计关联数量的方法
2019/10/10 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
tp5.1 框架join方法用法实例分析
2020/05/26 PHP
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
layui弹出层效果实现代码
2017/05/19 Javascript
Vue2.0 http请求以及loading展示实例
2018/03/06 Javascript
JavaScript 高性能数组去重的方法
2018/09/20 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
2019/09/09 Javascript
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
Python采集代理ip并判断是否可用和定时更新的方法
2018/05/07 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
python爬取指定微信公众号文章
2018/12/20 Python
python实现简单五子棋游戏
2019/06/18 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
python爬虫增加访问量的方法
2019/08/22 Python
Python如何访问字符串中的值
2020/02/09 Python
Django media static外部访问Django中的图片设置教程
2020/04/07 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
python exit出错原因整理
2020/08/31 Python
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
《油菜花开了》教学反思
2014/02/22 职场文书
伊索寓言教学反思
2014/05/01 职场文书
服务型党组织建设典型材料
2014/05/07 职场文书
年检委托书
2014/08/30 职场文书
小学见习报告
2014/10/31 职场文书
幼师中班个人总结
2015/02/12 职场文书
运动会加油稿
2015/07/22 职场文书
详解Python魔法方法之描述符类
2021/05/26 Python
Spring boot应用启动后首次访问很慢的解决方案
2021/06/23 Java/Android
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL