简介
列表是Python中标准数据类型之一,可以把它看成存储数据的容器,并且可以存储不同类型的数据。列表是可更改的数据类型,意味着修改列表,在内存空间中的地址不会变。
列表的定义
将数据用[]
包含的数据类型称为列表,一般有两种创建方式:
直接创建:
1 2 3 |
>>>a = [1, 2, 3, 4] >>>a [1, 2, 3, 4] |
调用list()
函数:
1 2 3 4 |
>>>b = (1, 2, 3, 4) >>>a = list(b) >>>a [1, 2, 3, 4] |
访问列表中的值
与字符串的索引一样,列表索引从0开始。可以利用切片工具获取列表中的值:
1 2 3 4 5 6 7 8 9 |
>>>a = [5, 2, 0, 1, 3, 1, 4] >>>a[0] 5 >>>a[-1] 4 >>>b = ['finthon', 'com', 5, 2, 0] >>>b[0:2] ['finthon', 'com'] |
列表运算
列表支持一些常规的运算:
列表运算 | 描述 |
---|---|
len(list) | 返回列表的长度 |
max(list) | 返回列表中元素的最大值 |
min(list) | 返回列表中元素的最小值 |
list1 + list2 | 列表中元素相加 |
list * 3 | 列表中元素相乘 |
x in list | 元素是否在列表中 |
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
>>>a = [3, 5, 3, 7, 8, 9, 0, 1] >>>b = [1, 2, 4] >>>len(a) 8 >>>max(a) 9 >>>min(a) 0 >>>a + b [3, 5, 3, 7, 8, 9, 0, 1, 1, 2, 4] >>>5 in a True |
更新列表中的值
直接通过赋值运算改变列表中的值:
1 2 3 4 5 6 7 8 |
>>>x = ['a', 'b', 'c'] >>>id(x) #查看列表在内存空间的地址 1508109268488 >>>x[0] = 1 >>>x [1, 'b', 'c'] >>>id(x) 1508109268488 |
可以发现更新列表以后,列表在内存空间中的地址并没有发生变化。
嵌套列表
列表中的数据类型可以不同,甚至是列表嵌套列表:
1 2 3 4 5 6 7 |
>>>x = [1, 'b', [1, 2, 3]] >>>x[2] [1, 2, 3] >>>x[2][1] = 5 >>>x [1, 'b', [1, 5, 3]] |
列表方法
列表操作中有如下方法:
函数 | 描述 |
---|---|
list.append(obj) | 在列表末尾添加新的对象 |
list.count(obj) | 统计某个元素在列表中出现的次数 |
list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
list.index(obj) | 从列表中找出某个值第一个匹配项的索引位置 |
list.insert(index, obj) | 将对象插入列表 |
list.pop([index=-1]]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.reverse() | 反向列表中元素 |
list.sort(cmp=None, key=None, reverse=False) | 对原列表进行排序 |
list.clear() | 清空列表 |
list.copy() | 复制列表 |
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
>>>a = [2, 2, 3] >>>a.append(4) >>>a [2, 2, 3, 4] >>>a.count(2) 2 >>>a.extend([3, 2, 1]) >>>a [2, 2, 3, 4, 3, 2, 1] >>>a.index(3) #查找第一次出现数字3所在的索引位置 2 >>>a.insert(1, 5) #在索引为1的位置插入数字5 >>>a [2, 5, 2, 3, 4, 3, 2, 1] >>>a.pop() #默认移除最后一个值,并返回这个值 1 >>>a [2, 5, 2, 3, 4, 3, 2] >>>a.remove(2) #移除第一次匹配的数字2 >>>a [5, 2, 3, 4, 3, 2] >>>a.reverse() >>>a [2, 3, 4, 3, 2, 5] >>>a.sort() >>>a [2, 2, 3, 3, 4, 5] >>>b = a.copy() >>>b [2, 2, 3, 3, 4, 5] >>>a.clear() #清除a的内容后,b的内容不变,说明copy()函数在内存空间中新建对象 >>>a [] >>>b [2, 2, 3, 3, 4, 5] |
复制列表
从copy()函数可以看出,复制后的对象是新建的,因此改变原始对象,新建对象不会变,除了这种方法外,还可以直接使用切面工具复制对象。
代码演示:
1 2 3 4 5 6 |
>>>a = [5, 2, 0] >>>b = a.copy() >>>id(a) #内存空间地址不同 1508111856392 >>>id(b) 1508111858760 |
或者:
1 2 3 4 5 6 |
>>>a = [5, 2, 0] >>>b = a[:] >>>id(a) #内存空间地址不同 1508109267080 >>>id(b) 1508109267592 |
但是如果直接通过赋值的方式,只是建立了第二个引用:
1 2 3 4 5 6 |
>>>a = [5, 2, 0] >>>b = a >>>id(a) #内存空间地址相同 1508109267080 >>>id(b) 1508109267080 |