重点总结
list
、tuple
、dict
、set
四种类型哪些是可变的?- 元组只能调用两个方法:
count()
index()
list
、tuple
、dict
有序,set
无序
1 | 列表 List
可变对象,
适用场景:利用顺序和位置定位元素,尤其是元素顺序或内容经常发生改变时
底层实现:以 dynamic array 实现,增删元素时动态分配释放内存,缺点是同时支持多种数据类型会导致内存空间占用得比较分散,因此占用更多空间
可嵌套:列表可嵌套列表,即多维列表 Multidimensional List
>>> a, b = [1, 2, 3, 4], [5, 6, 7, 8]
>>> sum = [a, b]
>>> sum
[[1, 2, 3, 4], [5, 6, 7, 8]] # 嵌套
>>> sum[0][3] # 取值
4
1-1 | 基本操作
-
创建
l = [] # M1 l = list() # M2
-
转换
语法:
list(iterable)
l=list((1,2,3)) >>> l [1, 2, 3] >>> list({ 'a':1,'b':2}) ['a', 'b']
-
获取 & 修改
语法:
list[offset]
offset 必须在有效范围内,即小于
len(list)
,否则 IndexError,-1
代表最后一个位置a = [1, 2, 3] >>> a[1] 2 >>> a[1] = 0 >>> a [1, 0, 3]
-
获取元素个数
a = [1, 2, 3] >>> len(a) 3
-
拼接
squares = [1, 4] >>> squares + [9, 16] [1, 4, 9, 16] # squares 此时依旧是[1, 4] >>> squares += [9, 16] >>> squares [1, 4, 9, 16]
-
切片
语法:
list[start:end:step]
与字符串用法类似,但可以修改原数据值,
l[2:5] = ['a','b','c'] # 可修改部分元素 l[2:5] = [] # 删除部分元素 l[:] = [] # 修改整个列表
⚠️ 注意为切片赋值时,值必须是可迭代对象,即使切片仅有一个值也不行!
l = [1,2,3] >>> l[:1] = 4 # TypeError: can only assign an iterable >>> l[:1] = (888,) # [888, 2, 3]
-
计数
a = [1,1,1,1] >>> a.count(1) 4
1-2 | 复制
💻运算符 *
与字符串相同,可直接乘倍数
>>> [0] * 5
[0, 0, 0, 0, 0]
💻copy()
⚠️ 列表赋给多个变量时,其中一个修改了 另一个也跟着变,因此列表内置 copy()
方法
>>> a = [1,2,3]
>>> b = a
>>> b.pop()
3
>>> a, b
([1, 2], [1, 2])
>>> print(a,b)
[1, 2] [1, 2]
⭕正确方法是 b=a.copy()
即可保证双方互不影响
1-3 | 增加元素
💻append()
语法:append(object)
------该方法将被添加元素作为单独元素添加,直附不拆
>>> l=['a','b']
>>> l.append(['c','d']) #可以填写含有变量的表达式
['a','b',['c','d']]
💻extend()
语法:extend(iterable)
将可迭代的变量依次插入
>>> l = [1,2,3]
>>> l.extend([4,5])
>>> l.extend(6)
TypeError: 'int' object is not iterable
💻insert()
语法:insert(index, object)
⚠️在指定索引之前插入
>>> l = [1,2,3]
>>> l.insert(-1, "4")
>>> l
[1, 2, '4', 3]
>>> l1 = [1,2,3]
>>> l1.insert(0, 9)
>>> l1
[9, 1, 2, 3]
⚠️负数索引有所不同,参数为 -1
但实际插入的是 -2
的位置
>>> l = [1,2,3]
>>> l.insert(-1, 'x')
>>> l
[1, 2, 'x',