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. matplotlib之设置极坐标起点的位置

    #!/usr/bin/env python3 #-*- coding:utf-8 -*- ############################ #File Name: polar.py #Auth ...

  2. 从Python的角度来看编码与解码

    导语: Python2和Python3中,因为默认字符集的不同而造成的麻烦,简直是程序员的梦魇!要彻底告别这个麻烦,就需要从本质上来理解编码和解码. 为什么要有编码? 对于不会英文的中国人来说,将英文 ...

  3. 2018.5.2(7:20到的办公室开始早课 阮一峰的JS) 所有的默默努力都是为了让自己看起来毫不费力

    continue语句用于立即终止本轮循环,返回循环结构的头部,开始下一轮循环. break语句用于跳出代码块或循环. 标签(label) JavaScript 语言允许,语句的前面有标签(label) ...

  4. SysTick—系统定时器

    本章参考资料<ARM Cortex™-M4F 技术参考手册> -4.5 章节 SysTick Timer(STK), 和4.48 章节 SHPRx,其中 STK 这个章节有 SysTick ...

  5. Discuz!X3.2修改用户名注册长度限制的方法

    Discuz!X3.2用户名注册长度限制为15个字符,有些站长朋友觉得太短,需要改的长一点,但是很多人都不知道怎么修改,下面就告诉大家如何修改这个限制.按照以下步骤来就可以了! 1.打开 ) {    ...

  6. logback参考配置

    logback配置 <?xml version="1.0" encoding="UTF-8"?> <configuration> < ...

  7. 第二百一十六节,jQuery EasyUI,Spinner(微调)组件

    jQuery EasyUI,Spinner(微调)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Spinner(微调)组件的使用方法,这个 ...

  8. SQLServerException:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。

    一.问题描述: 1.连接数据库时抛出的异常: com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1433 连接到主机 localhost 的 ...

  9. cobbler default system 网络安装时主机的menu上只有一个local选项

    问题:使用cobbler default system 做pxe网络安装时,主机启动后安装menu上只有一个local选项,看不到对应的system名字 解决:cobbler default syst ...

  10. 关于C# wpf DataGrid单元格双击设置单元格内容

    1.我是使用了 visual stadio 2015, 用的C# WPF写个工具,但是发现wpf原生没有涉及表格的东西(类似 winform·的DataGridView),所以使用的是toolkit工 ...