List 存储的是一组有序序列的值。
内存分配方式:
类似于C++中vector,首先分配一段空间,当分配空间使用完后,将重新开辟一块更大的空间,将原有数据拷贝到新开辟的空间后,释放原有空间。
List 存储方式:
每一个存储单元(每一个元素)存储的是值得引用地址,所以可以存储任意类型。
性能特点:
(1)由于采用动态数组方式存储,存储空间永远大于实际存储得元素,占用空间相对tupple或者array多。
(2)由于存储得是值域得引用,故每次读写先根据下标找到值域的地址,在进行数据的访问,读写速度相比array慢。
特性:
(1)可动态修改
(2)支持切片操作
(3)支持算数运算(+, *)
(4)支持范围运算(in, not in)
(5)可循环迭代
(6)当链表为空时,if判断为False,非空为True
定义方式:
L = [] # 定义一个空链表
L = [1, 2, 3] # 定义一个链表并初始化数据
算数运算:
(1)切片操作:
x = [1, 2, 3, 4]
print x[1] # 下标为1的元素值 --> 2
print x[1:3] # 从下标为1开始,到下标为3(不包含)的序列 --> [2, 3]
print x[1:-1] # 从下标为1开始,到倒数第一个(不包含)的序列 --> [2, 3]
print x[1:] # 下标为1后面的所有元素 --> [2, 3, 4]
print x[:-1] # 从投开始到倒数第一个的序列 -->[1, 2, 3]
(2)算数运算
如果链表当前存储空间在相加或者相乘后仍然足够存储追加的元素,则之间追加到当前空间,否则按照(内存分配方式)进行分配。
x = [1, 2]
print id(x) # 地址:45830280
x += [3, 4] # x = [1, 2, 3, 4]
print id(x) # 地址:45830280
x = [1, 2] * 2 # 2次叠加-->[1, 2, 1, 2]
(3)范围运算
if 5 in [1, 2, 3]:
# TODO
pass
if 5 not in [1, 2, 3]:
# TODO
pass
方法列表:
对象方法: