List

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

比如:

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

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

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

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

  1. >>> classmates[-1]
  2. 'Tracy'
  3. >>>

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

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

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

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

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

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

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

  1. >>> classmates
  2. ['Michael', 'B', 'Bob', 'Tracy', 'A']
  3. >>> classmates.pop(1)
  4. 'B'
  5. >>> classmates
  6. ['Michael', 'Bob', 'Tracy', 'A']

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

  1. >>> classmates
  2. ['Michael', 'Bob', 'Tracy', 'A']
  3. >>> classmates[3] = "Sarah"
  4. >>> classmates
  5. ['Michael', 'Bob', 'Tracy', 'Sarah']

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

  1. >>> L = ['A',45,True,3.45]
  2. >>> L
  3. ['A', 45, True, 3.45]

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

  1. >>> M = ['D',L]
  2. >>> M
  3. ['D', ['A', 45, True, 3.45]]

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

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

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

  1. >>> N = []
  2. >>> len(N)
  3. 0

Tuple

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

  1. >>> classmates = ('A','B','C')
  2. >>> classmates
  3. ('A', 'B', 'C')

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

那么,不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量使用tuple。

tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,比如:

  1. >>> t = (1,2)
  2. >>> t
  3. (1, 2)

如果要定义一个空的tuple,可以写成():

  1. >>> t = ()
  2. >>> t
  3. ()

但是,要定义一个只有1个元素的tuple,如果你像如下这么定义:

  1. >>> t = (1)
  2. >>> t
  3. 1

那么你定义的就不是一个tuple,是1这个数,因为括号()既可以表示tuple,又可以表示数学公式中的小括号。

这就产生了歧义,因此Python规定,这种情况下,按小括号计算。

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

  1. >>> t = (1,)
  2. >>> t
  3. (1,)

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

“可变的”tuple:

  1. >>> t = ('a','b',['A','B'])
  2. >>> t
  3. ('a', 'b', ['A', 'B'])
  4. >>> t[2][0] = 'X'
  5. >>> t[2][1] = 'Y'
  6. >>> t
  7. ('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. 微信小程度腾讯地图SDK使用方法

    在开发过程中,不少人肯定遇到过要用到地图,那么在小程序里,腾讯也给出了相应的SDK供我们来使用.那么接下来,就介绍下如何使用该SDK实现获取经纬度然后显示当前用户所在地址 首先第一步:下载腾讯地图SD ...

  2. 1.2.3 Task and Back Stack - 任务和回退堆

    一个应用通常包含多个Activities.每个activity的设计应该围绕着某种指定类型的action,如果这样做了,用户就可以执行该action,也可以用它来开启另外的activity.例如,邮件 ...

  3. SAML2.0 协议初识(二)---Service Provider(SP)

    上一节,我们初步认识了 SAML 协议的概念和工作流程,这一节将介绍 SP 端的一些细节. 通常情况下,SP 端是请求发起端,即当用户访问 SP 端的受保护资源时,由 SP 端向认证中心(IDP 端) ...

  4. 免安装Oracleclient和PL/SQL

    写在前面: Oracle是典型的C/S结构,服务端提供oracle服务的实例,主要用于数据库的管理,对象的管理与存储.数据的 存储.查询.数据库资源的监控.监听等一些服务. 而client仅仅是一个与 ...

  5. YARN机制

    YARN是资源管理调度的机制,之前一直以来和MapReduce机制合在一起,之后才分开.正是因为YARN机制单独独立出来,才使得Hadoop框架更加具有普适性.MapReduce可以处理海量离线数据, ...

  6. Java动态代理机制小结

    因为最近学习hadoop中用到了动态代理的相关知识,之前AOP编程也碰到过,所以在这里特地总结一下. 在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(In ...

  7. javaweb乱码(tomcat服务器)

    et提交  :<Connector protocol="HTTP/1.1" port="80" redirectPort="8443" ...

  8. 第二百四十二节,Bootstrap列表组面板和嵌入组件

    Bootstrap列表组面板和嵌入组件 学习要点: 1.列表组组件 2.面板组件 3.响应式嵌入组件 本节课我们主要学习一下 Bootstrap 的三个组件功能:列表组组件.面板组件. 响应 式嵌入组 ...

  9. HashMap和Hashtable的区别?

    HashMap和Hashtable的区别? 解答:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都实现了Map接口,主要区别 在于HashMap允许空(null)键值(key ...

  10. highCharts图表应用-模拟心电图

    通过前两章的学习,相信大家对highcharts已经有了初步的了解.这一章将通过一个例子来模拟Highcharts如何实现经常变化的数据显示. 比如说股票的涨停.实时篮球比分以及A选手和B选手的支持率 ...