列表(list)是python中常用的一种类型。
列表是由若干值组成的序列,这些值可以是任何类型。
列表是可变的。
创建列表
创建一个列表,只需要将逗号(,
)隔开的值用方括号[]
括起来就行。
>>> [1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
这就创建了一个列表,它的值分别是1,2,3,4,5.
列表内的值可以是不同的类型:
>>> [1, 2.5, 'mwang']
[1, 2.5, 'mwang']
当然,值也可以是列表类型,这也叫做列表的嵌套:
>>> [1, ['a', 'b'], 2, ['c', 'd']]
[1, ['a', 'b'], 2, ['c', 'd']]
这个列表有四个值,分别是:
- 整数
1
。 - 列表
['a', 'b']
。这个列表包含两个值,第1个是字符a
,第2个是字符b
。 - 整数
2
。 - 列表
['c', 'd']
。这个列表包含两个值,第1个是字符c
,第2个是字符d
。
也可以创建一个空列表:
>>> []
[]
可以将列表赋值给一个变量:
>>> name = ['zhao', 'qian', 'sun', 'li']
>>> name
['zhao', 'qian', 'sun', 'li']
列表是可变的,这意味着可以对列表进行重新赋值:
>>> name = ['zhao', 'qian', 'sun', 'li']
>>> name
['zhao', 'qian', 'sun', 'li']
>>> name = [1, 2, 3, 4]
>>> name
[1, 2, 3, 4]
使用运算符+
连接列表:
>>> name1 = ['zhao', 'qian', 'sun', 'li']
>>> name2 = ['zhou', 'wu', 'zheng', 'wang']
>>> name = name1 + name2
>>> name
['zhao', 'qian', 'sun', 'li', 'zhou', 'wu', 'zheng', 'wang']
上面的例子中,+
将列表name1
与列表name2
按照写明的顺序连接,生成一个新的列表。把这个新列表赋值给变量name
。
如果列表中有重复的值,可以使用*
创建列表:
>>> age = ['wang', 24] * 4
>>> age
['wang', 24, 'wang', 24, 'wang', 24, 'wang', 24]
例子中,列表['wang', 24]
被重复4次,生成一个新列表,并将新列表赋值给变量age
。
访问列表中的值
通过下标(index)作为索引,可以访问列表中的值。
列表中的第1个值的下标是0,第2个值的下标是1,第3个值的下标是2……依此类推。
还有一种负数的索引方法,列表中最后1个值的下标是-1,倒数第2个值的下标是-2,倒数第3个值的下标是-3……依此类推。
例如下面的这个列表:
name = ['zhao', 'qian', 'sun', 'li']
name
列表的索引如下:
值 | 索引(下标) | 负数的索引(下标) |
---|---|---|
'zhao' | 0 | -4 |
'qian' | 1 | -3 |
'sun' | 2 | -2 |
'li' | 3 | -1 |
可以看到,对于有4(n)个值的列表,它的正数下标只能到3(n-1)。可以使用两种索引方式中的任意一种(或者混用)访问列表中的值:
>>> name = ['zhao', 'qian', 'sun', 'li']
>>> name[1] # 第2个值
'qian'
>>> name[-3] # 倒数第3个值
'qian'
>>> name[0] # 第1个值
'zhao'
>>> name[-1] # 最后1个值
'li'
>>> name[4] # 超出范围的下标
Traceback (most recent call last):
File "", line 1, in
IndexError: list index out of range
访问嵌套列表中的值:
>>> infomation = ['name', ['male', 'female'], 'age']
>>> infomation[1]
['male', 'female']
>>> infomation[1][0]
'male'
截取列表
可以截取列表的一部分。
首先创建一个列表:
>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
截取列表的一部分,需要使用下标和冒号:
,截取出的部分会成为一个新列表。
下面是一些例子:
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters[1:5] # 第2到第5个值
['b', 'c', 'd', 'e']
>>> letters[1:-2] # 第2到倒数第3个值
['b', 'c', 'd', 'e']
>>> letters[:5] # 第1个值到第5个值
['a', 'b', 'c', 'd', 'e']
>>> letters[:-3] # 第1到倒数第4个值
['a', 'b', 'c', 'd']
>>> letters[4:] # 从第5个值到最后一个值
['e', 'f', 'g']
>>> letters[:] # 所有值
['a', 'b', 'c', 'd', 'e', 'f', 'g']
对于list[n1:n2]
,截取列表中从下标n1
到下标n2-1
(即下标包含n1
但不包含n2
)的部分,并将此部分作为一个新的列表。
更新列表
列表中的值是可变的。
使用list.append(obj)
在列表末尾增加一个值:
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters.append('h')
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
例子中列表letters
末尾增加了一个值'h'
。
使用list.pop(index)
删除列表中的一个值,默认是最后一个值,函数返回该值:
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> letters.pop()
'h'
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g']
例子中删除了列表letters
中的最后一个元素'h'
,并返回该值。
下面是三个常用的函数:
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> len (letters) # 返回列表中值的个数
7
>>> max (letters) # 返回列表中'最大'的值
'g'
>>> min (letters) # 返回列表中'最小'的值
'a'
函数list.index(obj)
返回obj
在list
中第一个匹配项的下标,函数list.index(index,obj)
在list
中下标为index
的位置插入值obj
,下面是一个例子。
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> if 'c' in letters: # 判断'c'是否在letters内
... c_index = letters.index ('c') # 取得第一个'c'的下标,赋值给变量c_index
... letters.insert (c_index, 'z') # 在下标c_index的位置插入'z'
...
>>> letters
['a', 'b', 'z', 'c', 'd', 'e', 'f', 'g']
由于'c'
在letters
内,所以布尔表达式为真;取得第一个'c'
的下标为2,保存到变量c_index
中;在下标为c_index
(2)的位置插入'z'
。
使用list.remove(obj)
删除list
中第一个obj
的匹配项:
>>> name
['li', 'qian', 'sun', 'zhao', 'sun']
>>> name.remove('sun')
>>> name
['li', 'qian', 'zhao', 'sun']
例子中,列表name
中有两个'sun'
,之后使用name.remove('sun')
删除了其中的第一个'sun'
。
>>> name
['li', 'qian', 'zhao', 'sun', 'qian']
>>> name.count ('qian')
2
list.count(obj)
返回在list
中obj
出现的次数。上面的例子中'qian'
在name
中出现了2次。
list.reverse()
对列表中的值进行反向:
>>> name
['li', 'qian', 'zhao', 'sun', 'qian']
>>> name.reverse()
>>> name
['qian', 'sun', 'zhao', 'qian', 'li']
list.sort()
对列表中的值进行排序:
>>> name
['qian', 'sun', 'zhao', 'qian', 'li']
>>> name.sort()
>>> name
['li', 'qian', 'qian', 'sun', 'zhao']