列表和元组可以包含多个值。而且,由于列表本身又可以包含其他列表,所以可以用它们将数据安排成层次结构。
列表数据类型
“列表”是一个值,它包含多个字构成的序列。
[]是一个空列表,不包含任何值,类似于空字符串‘’。
可以用下表取得列表中的单个值。列表中第一个值的下标是0,第二个值的下标是1,依此类推。
负数下标中,整数值-1指的是列表中的最后一个下标,-2指的是列表中倒数第二个下标,依此类推。如:sample[8],sample[-1],在上图中,它们的值都是9。
如果使用的下标超出了列表中值的个数,Python会报错IndexError。
下标只能是整数,不能是浮点数。
列表也可以包含其他列表值。这些列表中的值,可以通过多重下标来访问。
>>> list=[[‘a‘,‘b‘,‘c‘],[1,2,3],‘abc‘,123] >>> list[1][2] 3
“切片”可以从列表中取得多个值,结果是一个新列表。
切片向上增长,直至第二个下标的值,但不包括它。
省略第一个下标相当于使用0,或者列表的开始。
省略第二个下标相当于使用列表的长度,意味着分片直至列表的末尾。
>>> list[0:2] [[‘a‘, ‘b‘, ‘c‘], [1, 2, 3]] >>> list[:2] [[‘a‘, ‘b‘, ‘c‘], [1, 2, 3]] >>> list[:] [[‘a‘, ‘b‘, ‘c‘], [1, 2, 3], ‘abc‘, 123]
使用len()函数可以获取列表的长度。
>>> len(list) 4 >>> len(list[0]) 3
可以使用下标改变列表中的值。
>>> list[3]=‘newvalue‘ >>> list [[‘a‘, ‘b‘, ‘c‘], [1, 2, 3], ‘abc‘, ‘newvalue‘] >>> list[0][2]=‘newC‘ >>> list [[‘a‘, ‘b‘, ‘newC‘], [1, 2, 3], ‘abc‘, ‘newvalue‘]
“+”操作符可以连接两个列表,得到一个新列表。
“*”操作符可以用于一个列表和一个整数,实现列表的复制。
>>> [1,2,3]+[‘a‘,‘b‘,‘c‘] [1, 2, 3, ‘a‘, ‘b‘, ‘c‘] >>> [‘a‘,‘b‘]*5 [‘a‘, ‘b‘, ‘a‘, ‘b‘, ‘a‘, ‘b‘, ‘a‘, ‘b‘, ‘a‘, ‘b‘]
del语句将删除列表中下标处的值,表中被删除值后面的所有值,都将向前移动一个下标。
>>> newlist [1, 2, 3, ‘a‘, ‘b‘, ‘c‘] >>> del newlist[-2] >>> newlist [1, 2, 3, ‘a‘, ‘c‘]
使用列表
在for循环中使用range(len(someList)),迭代列表的每一个下标。
>>> for i in range(len(newlist)): ... print(newlist[i]) ... 1 2 3 a c
利用in和not in操作符,可以确定一个值是否在列表中。
>>> ‘a‘ in newlist True >>> ‘c‘ not in newlist False
“+=”操作符可以完成字符串和列表的连接。
“*=”操作符可以完成字符串和1的复制。
>>> list=‘hello‘ >>> list += ‘ world‘ >>> list ‘hello world‘ >>> newlist=[‘a‘,‘b‘] >>> newlist *=3 >>> newlist [‘a‘, ‘b‘, ‘a‘, ‘b‘, ‘a‘, ‘b‘]
方法
方法和函数是一回事,只是它是调用在一个值上。
每种数据类型都有它自己的一组方法。
index()方法,可以传入一个值,如果该值存在于列表中,就返回它的下标。如果不存在,就报错ValueError。
如果列表中存在重复的值,就返回它第一次出现的下标。
>>> newlist [‘a‘, ‘b‘, ‘a‘, ‘b‘, ‘a‘, ‘b‘] >>> newlist.index(‘b‘) 1
append()方法,可以将参数添加到列表末尾。
insert()方法,可以在列表任意下标处插入一个值。
append()和insert()方法是列表方法,只能在列表上调用,不能在其他值上调用。
>>> newlist.append(‘cat‘) >>> newlist.insert(3,‘dog‘) >>> newlist [‘a‘, ‘b‘, ‘a‘, ‘dog‘, ‘b‘, ‘a‘, ‘b‘, ‘cat‘]
给remove()方法传入一个值,它将从被调用的列表中删除。
试图删除列表中不存在的值,将导致ValueError错误。
如果该值在列表中出现多次,只有第一次出现的值会被删除。
如果知道想要删除的值在列表中的下标,del语句就很好用。
如果知道想要从列表中删除的值,remove()方法就很好用。
>>> newlist.remove(‘dog‘) >>> newlist [‘a‘, ‘b‘, ‘a‘, ‘b‘, ‘a‘, ‘b‘, ‘cat‘]
sort()方法用于排序。sort()方法会对列表当场排序。
不能对既有数字又有字符串值的列表排序。
sort()方法对字符串排序时,使用ASCII字符排序。
如果需要按普通字典顺序排序,将关键字参数key设置为str.lower。
可以指定reverse关键字参数为True,让sort()按逆序排列。
>>> sample [1, 3, 5, 7, 2, 4, 6] >>> sample.sort() >>> sample [1, 2, 3, 4, 5, 6, 7] >>> sample.sort(reverse=True) >>> sample [7, 6, 5, 4, 3, 2, 1] >>> sample=sample+[‘abc‘] >>> sample.sort() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unorderable types: str() < int()
类似列表的类型:字符串和元组
字符串和列表实际上很相似,可以认为是单个文本字符的列表。对于列表的许多操作,也可以作用于字符串,按下标取值、切片、用于for循环、用于len(),以及用于in和not in操作符。
列表是“可变的”数据类型,它的值可以添加、删除或改变。但是,字符串是“不可变的”,它不能被更改。
“改变”一个字符串的正确方式,是使用切片和连接。构造一个“新的”字符串,从老的字符串里复制一些部分。
>>> name=‘Big Mike‘ >>> name[4:] ‘Mike‘ >>> newName=‘I am ‘+name[4:] >>> newName ‘I am Mike‘
元组数据类型,它是列表数据类型的不可变形式。
元组输入时用圆括号(),而不是用方括号[]。
如果元组中只有一个值,可以在括号内该值的后面跟上一个逗号,表明是元组而不是字符串。
>>> name=(‘Big Mike‘,‘little Tom‘,‘Good Jack‘) >>> name[1:2] (‘little Tom‘,) >>> name[2]=‘Bad Marry‘ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: ‘tuple‘ object does not support item assignment
使用list()和tuple()函数转换列表和元组的类型,它们将返回传递给它们的值的列表和元组版本。
>>> tuple([1,2,3]) (1, 2, 3) >>> list((1,2,3)) [1, 2, 3] >>> list(‘hello‘) [‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘]
引用
列表引用是指向一个列表的值。
当创建列表时,将对它引用赋给了变量。
变量就像包含着值的盒子。
当函数被调用时,参数的值被复制给变元。对于列表,这意味着变元得到的是引用的拷贝。
>>> a=11 >>> b=a >>> a=100 >>> a 100 >>> b 11 >>> c=[1,2,3,4] >>> d=c >>> c[1]=5 >>> c [1, 5, 3, 4] >>> d [1, 5, 3, 4]
copy.copy()函数,可以用来复制列表或字典这样的可变值,而不只是复制引用。
如果要复制的列表中包含了列表,那就使用copy.deepcopy()函数来代替。deepcopy()函数将同事复制它们内部的列表。
>>> import copy >>> list=[‘a‘,‘b‘,‘c‘] >>> newlist=copy.copy(list) >>> newlist[1]=100 >>> list [‘a‘, ‘b‘, ‘c‘] >>> newlist [‘a‘, 100, ‘c‘] >>> list=[1,2,3,[4,5,6,[7,8,9]]] >>> newlist1=copy.copy(list) >>> newlist1[3][0]=‘abc‘ >>> newlist1[1]=‘abc‘ [1, 2, 3, [‘abc‘, 5, 6, [7, 8, 9]]] >>> newlist1 [1, 2, 3, [‘abc‘, 5, 6, [7, 8, 9]]] >>> list [1, 2, 3, [‘abc‘, 5, 6, [7, 8, 9]]] >>> list=[1,2,3,[4,5,6]] >>> newlist1=copy.copy(list) >>> newlist2=copy.deepcopy(list) >>> list[2]=100 >>> newlist1 [1, 2, 3, [4, 5, 6]] >>> newlist2 [1, 2, 3, [4, 5, 6]] >>> list[3][0]=100 >>> newlist1 [1, 2, 3, [100, 5, 6]] >>> newlist2 [1, 2, 3, [4, 5, 6]]
本文出自 “乱码时代” 博客,请务必保留此出处http://juispan.blog.51cto.com/943137/1945641
原文:http://juispan.blog.51cto.com/943137/1945641