本文最后更新于 418 天前,其中的信息可能已经过时,如有错误请发送邮件到 wuxianglongblog@163.com
在 Python 中,列表是一个有序的序列。
列表用一对 []
生成,中间的元素用 ,
隔开,其中的元素不需要是同一类型,同时列表的长度也不固定。
| l = [1, 2.0, 'hello'] |
| print l |
空列表可以用 []
或者 list()
生成:
| empty_list = [] |
| empty_list |
| empty_list = list() |
| empty_list |
与字符串类似,列表也支持以下的操作:
用 len
查看列表长度:
列表加法,相当于将两个列表按顺序连接:
| a = [1, 2, 3] |
| b = [3.2, 'hello'] |
| a + b |
列表与整数相乘,相当于将列表重复相加:
| [1, 2.0, 'hello', 1, 2.0, 'hello'] |
列表和字符串一样可以通过索引和分片来查看它的元素。
索引:
| a = [10, 11, 12, 13, 14] |
| a[0] |
反向索引:
分片:
与字符串不同的是,列表可以通过索引和分片来修改。
对于字符串,如果我们通过索引或者分片来修改,Python 会报错:
| s = "hello world" |
| |
| s[0] = 'H' |
| |
| |
| TypeError Traceback (most recent call last) |
| |
| in () |
| 1 s = "hello world" |
| 2 |
| |
| |
| TypeError: 'str' object does not support item assignment |
而这种操作对于列表来说是可以的:
| a = [10, 11, 12, 13, 14] |
| a[0] = 100 |
| print a |
这种赋值也适用于分片,例如,将列表的第 2,3 两个元素换掉:
事实上,对于连续的分片(即步长为 1
),Python 采用的是整段替换的方法,两者的元素个数并不需要相同,例如,将 [11,12]
替换为 [1,2,3,4]
:
| a = [10, 11, 12, 13, 14] |
| a[1:3] = [1, 2, 3, 4] |
| print a |
这意味着,可以用这种方法来删除列表中一个连续的分片:
| a = [10, 1, 2, 11, 12] |
| print a[1:3] |
| a[1:3] = [] |
| print a |
对于不连续(间隔 step 不为 1)的片段进行修改时,两者的元素数目必须一致:
| a = [10, 11, 12, 13, 14] |
| a[::2] = [1, 2, 3] |
| a |
否则会报错:
| |
| |
| ValueError Traceback (most recent call last) |
| |
| in () |
| |
| |
| ValueError: attempt to assign sequence of size 0 to extended slice of size 3 |
Python 提供了删除列表中元素的方法 'del'。
删除列表中的第一个元素:
| a = [1002, 'a', 'b', 'c'] |
| del a[0] |
| print a |
删除第 2 到最后一个元素:
| a = [1002, 'a', 'b', 'c'] |
| del a[1:] |
| a |
删除间隔的元素:
| a = ['a', 1, 'b', 2, 'c'] |
| del a[::2] |
| a |
用 in
来看某个元素是否在某个序列(不仅仅是列表)中,用 not in 来判断是否不在某个序列中。
| a = [10, 11, 12, 13, 14] |
| print 10 in a |
| print 10 not in a |
也可以作用于字符串:
| s = 'hello world' |
| print 'he' in s |
| print 'world' not in s |
列表中可以包含各种对象,甚至可以包含列表:
| a = [10, 'eleven', [12, 13]] |
| a[2] |
a [2] 是列表,可以对它再进行索引:
l.count(ob)
返回列表中元素 ob
出现的次数。
| a = [11, 12, 13, 12, 11] |
| a.count(11) |
l.index(ob)
返回列表中元素 ob
第一次出现的索引位置,如果 ob
不在 l
中会报错。
不存在的元素会报错:
| |
| |
| ValueError Traceback (most recent call last) |
| |
| in () |
| |
| |
| ValueError: 1 is not in list |
l.append(ob)
将元素 ob
添加到列表 l
的最后。
| a = [10, 11, 12] |
| a.append(11) |
| print a |
append 每次只添加一个元素,并不会因为这个元素是序列而将其展开:
| a.append([11, 12]) |
| print a |
| [10, 11, 12, 11, [11, 12]] |
l.extend(lst)
将序列 lst
的元素依次添加到列表 l
的最后,作用相当于 l += lst
。
| a = [10, 11, 12, 11] |
| a.extend([1, 2]) |
| print a |
l.insert(idx, ob)
在索引 idx
处插入 ob
,之后的元素依次后移。
| a = [10, 11, 12, 13, 11] |
| |
| a.insert(3, 'a') |
| print a |
| [10, 11, 12, 'a', 13, 11] |
l.remove(ob)
会将列表中第一个出现的 ob
删除,如果 ob
不在 l
中会报错。
| a = [10, 11, 12, 13, 11] |
| |
| a.remove(11) |
| print a |
l.pop(idx)
会将索引 idx
处的元素删除,并返回这个元素。
| a = [10, 11, 12, 13, 11] |
| a.pop(2) |
l.sort()
会将列表中的元素按照一定的规则排序:
| a = [10, 1, 11, 13, 11, 2] |
| a.sort() |
| print a |
如果不想改变原来列表中的值,可以使用 sorted
函数:
| a = [10, 1, 11, 13, 11, 2] |
| b = sorted(a) |
| print a |
| print b |
| [10, 1, 11, 13, 11, 2] |
| [1, 2, 10, 11, 11, 13] |
l.reverse()
会将列表中的元素从后向前排列。
| a = [1, 2, 3, 4, 5, 6] |
| a.reverse() |
| print a |
如果不想改变原来列表中的值,可以使用这样的方法:
| a = [1, 2, 3, 4, 5, 6] |
| b = a[::-1] |
| print a |
| print b |
| [1, 2, 3, 4, 5, 6] |
| [6, 5, 4, 3, 2, 1] |
如果不清楚用法,可以查看帮助: