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. jquery 操作input radio 单选框

    1.jquery选中单选框 2.jquery 取消单选框 3.判断是否选中 4.设置不可编辑

  2. tomcat web 修改logo

    第一种: 打开tomcat目录,进入 D:\tomcat\apache-tomcat-7.0.50-1\webapps\ROOT 找到favicon.ico图标 然后替换成自己的 第二种: 由于tom ...

  3. extjs,ComboReturn

    package cn.edu.hbcf.common.vo; import java.io.Serializable; public class ComboReturn implements Seri ...

  4. java+lucene中文分词,来看看百度究竟是怎么找到你想要的(十分重要,楼主幸苦之作)

    我想只要是学过数据库的孩纸,不管是mysql,还是sqlsever,一提到查找,本能的想到的便是like关键字,其实去转盘网(分类模式)之前也是采用这种算法,但我可以告诉大家一个很不幸的事情,like ...

  5. Linux高频指令总结

    作为一个计算机专业的科班,不会玩Linux怎么能行呢?玩Linux用可视化界面显得太low了,为了效(zhuang)率(bi),当然要用什么都用指令啊,可是指令太多了啊,现在就把平时遇到的高频的指令做 ...

  6. 控件禁用与启easyui用

    1.validatebox可以用的用法:前两种适用于单个的validatebox;第三种应用于整个form里面的输入框; <1>.$("#id").attr(" ...

  7. c# 将html添加进剪贴板(带格式)

    调用: ClipboardHelper.CopyToClipboard("<h1>hello world</h1>", ""); /// ...

  8. tplink 703刷固件

    1.软件下载: ImageBuilder链接 如果是全新刷机的话,使用:http://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/open ...

  9. boost-tokenizer分词库学习

    boost-tokenizer学习 tokenizer库是一个专门用于分词(token)的字符串处理库;可以使用简单易用的方法把一个字符串分解成若干个单词;tokenizerl类是该库的核心,它以容器 ...

  10. webpack 从入门到工程实践

    from:https://www.jianshu.com/p/9349c30a6b3e?utm_campaign=maleskine&utm_content=note&utm_medi ...