List

Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。

比如:

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

用索引来访问list中的每一个位置的元素,索引从0开始:

>>> classmates[0]
'Michael'
>>> classmates[3] Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
classmates[3]
IndexError: list index out of range
>>>

如果要取得最后一个元素,除了计算索引位置外,还可以用-1做索引,用-1做索引直接取得list的最后一个元素:

>>> classmates[-1]
'Tracy'
>>>

以此类推,可以获取倒数第2个,倒数第3个:

>>> classmates[-2]
'Bob'
>>> classmates[-3]
'Michael'
>>> classmates[-4] Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
classmates[-4]
IndexError: list index out of range
>>>

list是一个可变的有序表,所以可以向list中追加元素到末尾:

>>> classmates.append("A")
>>> classmates
['Michael', 'Bob', 'Tracy', 'A']

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

>>> classmates
['Michael', 'Bob', 'Tracy', 'A']
>>> classmates.insert(1,"B")
>>> classmates
['Michael', 'B', 'Bob', 'Tracy', 'A']

要删除list末尾的元素,用pop(i)的方法,其中i是索引的位置:

>>> classmates
['Michael', 'B', 'Bob', 'Tracy', 'A']
>>> classmates.pop(1)
'B'
>>> classmates
['Michael', 'Bob', 'Tracy', 'A']

要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:

>>> classmates
['Michael', 'Bob', 'Tracy', 'A']
>>> classmates[3] = "Sarah"
>>> classmates
['Michael', 'Bob', 'Tracy', 'Sarah']

list里面的元素的数据类型也可以不相同,比如:

>>> L = ['A',45,True,3.45]
>>> L
['A', 45, True, 3.45]

list的元素也可以包含另一个list,比如:

>>> M = ['D',L]
>>> M
['D', ['A', 45, True, 3.45]]

要注意M只有两个元素,M[1]又是一个list:

>>> len(M)
2
>>> len(M[1])
4

如果一个list中一个元素也没有,就是一个空的list,它的长度为0:

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

Tuple

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

>>> classmates = ('A','B','C')
>>> classmates
('A', 'B', 'C')

现在,classmates这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,也可以使用classmates[0],classmates[-1],但是不能赋值成另外的元素。

那么,不可变的tuple有什么意义?因为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规定,这种情况下,按小括号计算。

所以,只有一个元素的tuple定义时必须加上一个逗号“,”,来消除歧义:

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

Python在显示只有一个元素的tuple时,也会加上一个逗号“,”,以免你误解成数学计算意义上的括号。

“可变的”tuple:

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

这个tuple定义的时候有三个元素,表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的不变是说,tuple的每个元素指向永远不变,如指向一个list,就不能改成指向其他对象,但是这个list本事是可变的。

总结

list和tuple是Python内置的有序集合,前者可变,后者不可变。

Python基础教程-List和Tuple的更多相关文章

  1. .Net程序员之Python基础教程学习----列表和元组 [First Day]

    一. 通用序列操作: 其实对于列表,元组 都属于序列化数据,可以通过下表来访问的.下面就来看看序列的基本操作吧. 1.1 索引: 序列中的所有元素的下标是从0开始递增的. 如果索引的长度的是N,那么所 ...

  2. 《python基础教程(第二版)》学习笔记 列表/元组(第2章)

    <python基础教程(第二版)>学习笔记 列表/元组(第2章)序列中的下标从0开始x='ABC' ==> x[0]='A', x[1]='B', x[2]='C'负数索引从右边开始 ...

  3. Python基础教程总结(一)

    引言: 一直都听说Python很强大,以前只是浏览了一些博客,发现有点像数学建模时使用的Matlab,就没有深入去了解了.如今Python使用的地方越来越多,最近又在学习机器学习方面的知识,因此想系统 ...

  4. Python基础教程-02

    <Python基础教程> 第3章 使用字符串 字符串方法find返回的并非布尔值.如果find像这样返回0,就意味着它在索引0处找到 了指定的子串 join可合并一个字符串列表,不能合并数 ...

  5. (Python基础教程之十二)Python读写CSV文件

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  6. (Python基础教程之十三)Python中使用httplib2 – HTTP GET和POST示例

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  7. (Python基础教程之八)Python中的list操作

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  8. (Python基础教程之二十二)爬虫下载网页视频(video blob)

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  9. 改写《python基础教程》中的一个例子

    一.前言 初学python,看<python基础教程>,第20章实现了将文本转化成html的功能.由于本人之前有DIY一个markdown转html的算法,所以对这个例子有兴趣.可仔细一看 ...

随机推荐

  1. dedecms使用

    使用到了dedecms内容管理系统,遇到两个问题: 1.点击登录后,没有登录进去也没有任何提示,一片空白 解决办法:我是把网站从云主机拷贝下来的,但是忘了云主机上的数据库密码和自己本地的数据库密码不一 ...

  2. Sqlserver 批量数据更改

    insert into AAA select GETDATE(),name from BBB where aid=0 update a set a = b.a,b=b.b,c=b.c from t a ...

  3. eclipse导入svn中的maven工程项目

    Eclipse导入现有的maven工程 第一步:右键如图 new->other 进入other->输入svn->从svn检索项目,如图 点击next>如下图,如是第一次则选择创 ...

  4. 架构探险——第三章(搭建轻量级Java Web框架)

    解决的问题 servlet的数量会随业务功能的扩展而不断增加,我们有必要减少servlet的数量,交给controller处理,它负责调用service的相关方法,并将返回值放入request或res ...

  5. 【Python】Webpy 源码学习

    那么webpy是什么呢? 阅读它的源码我们又能学到什么呢? 简单说webpy就是一个开源的web应用框架(官方首页:http://webpy.org/) 它的源代码非常整洁精干,学习它一方面可以让我们 ...

  6. flask os.environ 的作用

    使用环境变量取值, 是为了增强系统的适应性, 在某些场景下, 设置环境变量比较方便. 假如, 你有一套代码, 部署在不同的系统中, 恰好这些系统有权限且很容易地设置环境变量, 那么, 这时候通过环境变 ...

  7. RGB565 转换 BMP24

    今晚有心情,就做完了BMP16(RGB565) 转换成BMP24 的小程序.其中最关键的地方是: // k,WORD类型,是RGB565 的一个点的数据(可以认为是灰度). r=(k & 0x ...

  8. jQuery多项选项卡的实现

    请勿盗版.转载请加上出处http://blog.csdn.net/yanlintao1 请勿盗版,转载请加上出处http://blog.csdn.net/yanlintao1 css样式: @CHAR ...

  9. 项目文件不完整。缺少预期导入,DotnetCore如何切换SDK版本

    1. 项目文件不完整.缺少预期导入 如图: 2. 出现原因: SDK版本与项目所需的SDK版本不一致. 3. 解决问题: 3.1 项目所需的SDK版本如何确定? a. 检查.sln文件所在目录是否有: ...

  10. ThreadLocal分析

    我们再介绍一个在多线程环境中经常使用的类ThreadLocal,它是java为解决多线程程序的并发问题提供了一种新的方向,使用这个ThreadLocal类可以帮助开发者很简单地编写出简洁的程序,并且是 ...