目录
0.列表介绍
1.列表定义和初始化
2.列表索引访问
3.列表元素修改
4.列表元素删除
5.列表其他操作
0.列表介绍
线性,可变,有序
1.一个队列,一个排列整齐的队伍
2.列表内的个体称作元素,由若干元素组成列表
3.元素可以是任意对象(数字、字符串、对象、列表等)
4.列表内元素有顺序,可以使用索引
5.线性的数据结构
6.使用[ ]表示
7.列表是可变的
NOTE:比较列表list,链表,queue,stack的差异
1.列表定义和初始化
1.1 list()
括号中不放或者放置可迭代对象
>>> lst1 = list()
>>> lst1
[]
>>> lst2 = []
>>> lst2
[]
>>> lst3 = [1,'ab',(1,3)]
>>> lst3
[1, 'ab', (1, 3)]
1.2 list(iterable)
>>> lst4 = list(range(5))
>>> lst4
[0, 1, 2, 3, 4]
>>> tup1 = (1,2,3,4)
>>> lst5 = list(tup1)
>>> lst5
[1, 2, 3, 4]
NOTE:列表不能一开始就定义大小
2.列表索引访问
list[index]
0.索引:也叫下标
1.正索引:从左至右,从0开始,为列表中每一个元素编号
2.负索引:从右至左,从-1开始
3.正负索引不可以超界,否则引发异常IndexError
2.1 下标索引访问
>>> lst = list(range(10))
>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst[0]
0
>>> lst[3]
3
>>> lst[10]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> lst[-1]
9
>>> lst[-10]
0
>>> lst[-11]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
2.2 index(value,[start,[stop]])
1.通过值value,从指定区间(前闭后开)查找列表内的元素是否匹配
2.匹配第一个就立即返回索引
3.匹配不到,抛出异常ValueError
>>> lst = [4,42,2,35]
>>> lst
[4, 42, 2, 35]
>>> lst.index(4)
0
>>> lst.index(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 0 is not in list
>>> lst.index(4,0,3)
0
>>> lst.index(2)
2
>>> lst.index(2,0,2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 2 is not in list
2.3 count(value)
返回列表中匹配value的次数
>>> lst = [1,2,2,3,3,3,4,4,4,4]
>>> lst
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
>>> lst.count(0)
0
>>> lst.count(1)
1
>>> lst.count(2)
2
3.列表元素修改
3.1 索引访问修改:list[index] = value
索引超界会报IndexError异常
>>> lst = list(range(10))
>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst[4]
4
>>> lst[4] = 100
>>> lst
[0, 1, 2, 3, 100, 5, 6, 7, 8, 9]
>>> lst[11] = 100
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
3.2 列表增加元素
3.2.1 append(object) -> None
列表尾部追加元素,返回None
没有新的列表产生,就地修改
时间复杂度O(1)
>>> lst = list(range(4))
>>> lst
[0, 1, 2, 3]
>>> lst.append(4)
>>> lst.append(5)
>>> lst
[0, 1, 2, 3, 4, 5]
3.2.2 insert(index,object) -> None
在指定的索引index处插入元素object
不产生新的列表,就地修改
时间复杂度O(n)
索引超界:超上界,尾部追加;超下界,头部追加
需要两个参数,否则报TypeError错误
>>> lst
[0, 1, 2, 3]
>>> lst.insert(1,10)
>>> lst
[0, 10, 1, 2, 3]
>>> lst.insert(6,66)
>>> lst
[0, 10, 1, 2, 3, 66]
>>> lst.insert(11,-100)
>>> lst
[0, 10, 1, 2, 3, 66, -100]
>>> lst.insert(-11,-100)
>>> lst
[-100, 0, 10, 1, 2, 3, 66, -100]
>>> lst.insert()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: insert expected 2 arguments, got 0
3.2.3 extend(iterable) -> None
将可迭代对象的元素追加进来,返回None
返回None,列表立即发生修改
>>> lst = [0,1,2]
>>> lst.extend((3,4))
>>> lst
[0, 1, 2, 3, 4]
>>> lst.extend([3,4])
>>> lst
[0, 1, 2, 3, 4]
>>> lst
[0, 1, 2, 3, 4]
>>> lst.extend({3,4})
>>> lst
[0, 1, 2, 3, 4]
>>> lst.extend('34')
>>> lst
[0, 1, 2, '3', '4']
3.2.4 + -> list
连接操作,将两个列表连接起来
产生新的列表,不改变原列表
本质上调用的是add()方法
>>> lst1 = [0,1,2]
>>> lst2 = [3,4,5]
>>> lst1 + lst2
[0, 1, 2, 3, 4, 5]
3.2.5 * -> list
重复操作,将本列表元素重复n次,返回新的列表
>>> x = [[0,1,2]]*3
>>> x
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]
>>> x[0][1]
1
>>> x[0][1] = 20
>>> x
[[0, 20, 2], [0, 20, 2], [0, 20, 2]]
>>> y = [1]*5
>>> y
[1, 1, 1, 1, 1]
>>> y[0]
1
>>> y[0] = 6
>>> y
[6, 1, 1, 1, 1]
>>> y[1] = 7
>>> y
[6, 7, 1, 1, 1]
>>> lst1 = [[1,2,3]]*3
>>> lst1
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>> id(lst1),id(lst1[0]),id(lst1[1]),id(lst1[2])
(139997400807488, 139997400808128, 139997400808128, 139997400808128)
>>> lst1[0] == lst1[1]
True
>>> lst1[0] is lst1[1]
True
深拷贝与浅拷贝:https://www.jianshu.com/p/7ecf03209545
4.列表元素删除
4.1 remove(value) -> None
从左至右查找第一个匹配value的值,移除该元素,返回None
返回None,列表就地修改
效率较低,value后面的值会逐个向前移动
>>> lst = [0,1,0,2,3,4,3]
>>> lst.remove(0)
>>> lst
[1, 0, 2, 3, 4, 3]
>>> lst.remove(5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
4.2 pop([index]) -> item
不指定索引index,就从列表尾部弹出一个元素
指定索引index,就从索引处弹出一个元素,索引超界抛出IndexError错误
指定index时,效率和remove相当;不指定时O(1)
>>> lst = [0,1,2,3]
>>> lst
[0, 1, 2, 3]
>>> lst.pop()
3
>>> lst
[0, 1, 2]
>>> lst.pop(0)
0
>>> lst
[1, 2]
>>> lst.pop(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop index out of range
4.3 clear() -> None
清除列表所有元素,剩下一个空列表
>>> lst = list(range(10))
>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst.clear()
>>> lst
[]
5.列表其他操作
5.1 reverse() -> None
将列表元素反转,返回None
直接修改列表
>>> lst = list(range(10))
>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst.reverse()
>>> lst
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
5.2 sort(key=None,reverse=False) -> None
对列表元素进行排序,就地修改,默认升序
reverse为True,反转,降序
key是一个函数,指定key如何排序:lst.sort(key=functionname)
>>> lst = [4,42,542,5,1,8]
>>> lst.sort()
>>> lst
[1, 4, 5, 8, 42, 542]
>>> lst = [4,42,542,5,1,8]
>>> lst.sort(reverse=True)
>>> lst
[542, 42, 8, 5, 4, 1]
5.3 in
判断元素是否在列表内,返回bool值
>>> [3,4] in [1,2,[3,4]]
True
>>> 1 in [1,2]
True
>>> 3 in [1,2]
False
网友评论