列表 list() ,可以存储多个多种对象的引用
列表的创建方式:

  • 赋值,方括号[ ] ,然后赋值
  • 使用内置函数list()

列表特点:

列表元素按顺序有序排序
索引映射唯一一个数据
列表可以存储重复数据
任意数据类型混存
根据需要动态分配和回收地址

列表的索引从0开始,如果索引为负则倒着查找

定义与索引

lst=['hello',89,3.14,'start']
lst1=list(['hello',89,3.14,'start'])
import sys
print(sys.getsizeof(lst))
print(sys.getsizeof(lst1))
print(lst[0])   #正向索引获取元素,首位元素索引为0
print(lst[-4])	#负向索引获取元素
print(lst.index(89))  #查询89的索引
print(lst.index(3.14,2,4))  #在指定范围内查找索引
120
88
hello
hello
1
2

列表的切片操作
使用索引找到位置再切片,形成新的列表,占用新内存

lst=[11,22,33,44,55,66,77,88,99]
lst1=lst[1:5]  #注意是左包、右不包
print(lst1)
print(id(lst))
print(id(lst1))    #内存地址发生变化
lst2=lst[1:5:2]  #设置步长为2
print(lst2)
lst3=lst[:5:2]  #省略start,默认0开始
lst4=lst[1::2]  #省略end,默认N-1结束
print(lst3)
print(lst4)
lst5=lst[:5:-1]  #步长为负,默认为最后一个元素时第一个元素
lst6=lst[5::-1]  #start与end的索引是正常的,步长正负影响的是第一个元素的位置
print(lst5)
print(lst6)
print(11 in lst)
[22, 33, 44, 55]
1875498054144
1875498055104
[22, 44]
[11, 33, 55]
[22, 44, 66, 88]
[99, 88, 77]
[66, 55, 44, 33, 22, 11]
True

列表元素遍历:

lst=[11,22,33,44,55,66,77,88,99]
for i in lst:
    print(i)

列表元素的增、删、改操作
lappend(x) ————x 为增加的元素
extend(x)————在末尾扩展至少一个元素,或多个元素。x为元素或列表
insert (n,x)————在索引处添加元素
切片————在列表的任意位置添加n多元素

lst=[1,2,3,4,5]
lst.append(111)
print(id(lst))
print(lst)
print(id(lst))  #增加元素不影响内存的id
lst2=[1,2,3,4,5]
lst2.extend(lst)
print(lst2)
lst2.extend([1,2,3])
print(lst2)
lst2.insert(0,'start') #在索引为0出添加元素,其余后移
print(lst2)
lst2[1:]=lst2[:-4:-1]
print(lst2)
lst_=[1,2,3,4,5]   #定义新列表
lst_=lst_[::-1]   #使用切片操作完成了列表元素的倒置
print(lst_)
2058663899648
[1, 2, 3, 4, 5, 111]
2058663899648
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 111]
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 111, 1, 2, 3]
['start', 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 111, 1, 2, 3]
['start', 3, 2, 1]
[5, 4, 3, 2, 1]

remove(x)————从列表中移除一个元素x,如果有多个x则去除第一个
pop (x) ————根据索引移除索引为x的元素
切片———— 删除至少一个元素,产生新列表,但占新内存
clear() ———— 清空列表中元素
del ————删除列表这个变量,相当于清内存

lst=[1,2,3,4,5,2]
lst.remove(2)  #从列表中移除一个元素2,如果有多个2则去除第一个
print(lst)
lst.pop(0)  #移除索引为0的元素,如果不写索引参数,则默认为最后一个
print(lst)
lst[1:3]=[]   #将lst中索引1到3进行删除,用空列表替代
print(lst)    #列表索引也是前包后不包的
lst.clear()   #清空列表中元素
print(lst)
del lst  #删除列表这个变量,相当于清内存
[1, 3, 4, 5, 2]
[3, 4, 5, 2]
[3, 2]
[]

list(n)=x: 一次修改一个值,直接索引n处赋值为x
切片修改: 一次修改一段元素

lst=[1,2,3,4,5,6]
lst[-1]=10
print(lst)
print(id(lst))
lst[1:4]=[10,20,30,40,50,60]    #切片修改前后元素数量可以不一致
print(id(lst))   #切片修改后id都不发生变化
print(lst)
[1, 2, 3, 4, 5, 10]
1337790640640
[1, 10, 20, 30, 40, 50, 60, 5, 10]
1337790640640

列表的排序操作
sort() ————默认升序,降序时用sort(reverse=True),内存地址不变
=sorted(list)————排序list后产生新的排序对象new_list,内存地址发生变化
=sorted(list,reverse=True) ————反序排序list后产生新的排序对象new_list

lst=[7,2,8,4,5,6]
print(id(lst),lst)
lst.sort()
print(id(lst),lst)  #列表id不变
lst.sort(reverse=True)   #为False时,默认为升序,省略不写
print(id(lst),lst)
lst1=[5,9,2,4,5,6,1]
new_lst=sorted(lst1)
print(id(lst1),lst1)
print(id(new_lst),new_lst)  #列表id发生变化
new_lst=sorted(lst1,reverse=True)
print(id(new_lst),new_lst)   #降序排序
2079783268800 [7, 2, 8, 4, 5, 6]
2079783268800 [2, 4, 5, 6, 7, 8]
2079783268800 [8, 7, 6, 5, 4, 2]
2079783585024 [5, 9, 2, 4, 5, 6, 1]
2079783585088 [1, 2, 4, 5, 5, 6, 9]
2079783585152 [9, 6, 5, 5, 4, 2, 1]

列表生成式:生成列表的公式

lst1=[i*3 for i in range(10)]  #产生一个0到9之间数的三倍数
lst2=[i*i for i in range(10)]  #产生一个0到9之间数的平方
print(lst1)
print(lst2)
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]