Python列表有不少的知识需要我们学习,下面我们就来看看相关的代码,只有不断的学习才能更好的进行相关的编写。Python列表(list)类似于C#中的可变数组(ArrayList),用于顺序存储结构。
列表用符号[]表示,中间的元素可以是任何类型(包括列表本身,以实现多维数组),元素之间用逗号分隔。取值或赋值的时候可以像C数组一样,按位置索引:
- # -*- coding: utf-8 -*-
- array = [1,2,3]
- print array[0]
- #输出 1
- array[0] = 'a'
- print array
- #输出 ['a', 2, 3]
从上边的代码中你可能发现一个有趣的事情:在Python的列表中可以混合使用不同类型的数据,像['a', 2, 3]这样,不过我不建议你这样做,我觉得没什么好处(虽然个别场合下可能会比较方便)。#t#
另外还可以看到,列表是可变的序列,也就是说我们可以在“原地”改变列表上某个位置所存储的对象(的值)。
C#中ArrayList支持的多数操作(如追加、插入、删除、清空、排序、反转、计数等),Python中的list也都支持,同时list也支持“切片”这种操作。切片指的是抽取序列的一部分,其形式为:list[start:end:step]。其抽取规则是:从 start开始,每次加上step,直到end为止。默认的step为1;当start 没有给出时,默认从list 的第一个元素开始;当end=-1 时表示list 的最后一个元素,依此类推。一些简单的例子见下边代码:
- # -*- coding: utf-8 -*-
- test = ['never', 1, 2, 'yes', 1, 'no', 'maybe']
- print test[0:3] # 包括test[0],不包括test[3]
- print test[0:6:2] # 包括test[0],不包括test[6],而且步长为2
- print test[:-1] # 包括开始,不包括最后一个
- print test[-3:] # 抽取最后3 个
字符串、列表、元组都支持切片操作,这个很方便,应该学会熟练使用它。
最后,list是Python列表中最基础的数据结构,你可以把它当作链表、堆栈或队列来使用,效率还不错。Python中没有固定长度数组,如果你确实很在意性能,可以导入array模块来创建一个C风格的数组,它的效率很高,这里就不详细介绍了。
Python列表元组(tuple)
元组与列表非常相似,它是用()而不是[]括起来的序列。元组比列表的速度更快,但元组是一个不可变的序列,也就是与str一样,无法在原位改变它的值。除此之外,其他属性与列表基本一致。
元组定义的方法与列表类似,不过在定义只包含一个元素的元组时,注意在后边加一个逗号。请体会以下几句语句的差异:
- # -*- coding: utf-8 -*-
- test = [0] #列表可以这样定义
- print type(test) #输出<type 'list'>
- test = [0,] #也可以这样定义
- print type(test) #输出<type 'list'>
- test = (0,) #元组可以这样定义
- print type(test) #输出<type 'tuple'>
- test = (0) #但不能这样定义,Python会认为它是一个括号表达式 print type(test) #输出<type 'int'>
- test = 0, #也可以省略括号,但要注意与C的逗号表达式不同
- print type(test) #输出<type 'tuple'>
利用元组的这个特性,可以简化Python变量的初始化过程,如:
- x,y,z=1,2,3
还可以很简单地进行数据交换。比如:
- a = 1
- b = 2
- a,bb = b,a
以上这类语句在Python列表中被广泛应用于变量交换、函数传值等应用,因此Python的解释器在不断对其进行优化,现在已经具备了相当高的效率。所以以上代码在Python 2.5以后的版本中,比tmp = a; a = b; b = tmp这种常规语句更快。