变量存储的是一个对象的引用,列表存储的是N多个对象的引用
lst=['hello','world',98]
列表的创建
- 列表需要使用中括号[],元素之间使用英文的逗号进行分割
list1=['hello','world',98]
- 调用内置函数list()
list2=list(['hello','world',98,'hello'])
列表的特点
- 列表元素按顺序有序排序
print(list2) #['hello', 'world', 98, 'hello']
- 索引映射唯一一个数据:从前向后0、1、2··· 从后往前-1、-2、-3···
print(list2[0],list2[-3]) #hello world
- 列表可以存储重复数据
print(list2[0],list2[-4]) #hello hello
- 任意数据类型混存
- 根据需要动态分配和回收内存
列表生成式
[ i/i*i for i in range(1,10)]
#列表元素的表达式 自定义变量 可迭代对象
例:生成列表中的元素的值为2、4、6、8、10
lst3=[i*2 for i in range(1,6)]
# lst3=[i for i in range(2,11,2)]
print(lst3)
列表的查询操作
index()方法获取列表中指定元素的索引
如果查列表中存在N个相同元素,只返回元素中的第一个元素的索引
lst=['hello','world',98,'hello']
print(lst.index('hello')) #0
如果查询的元素在列表中不存在,则会抛出ValueError
还可以在指定的start和stop之间进行查找
print(lst.index(98,0,3)) #2
获取列表中的单个元素
正向索引从0到N-1;逆向索引从-N到-1;指定索引不存,抛出IndexError
lst1=['hello','world',98,'hello','world',234]
print(lst1[2]) #98
print(lst1[-4]) #98
# print(lst1[10]) #IndexError: list index out of range
获取列表中的多个元素 [start:stop:step]
切片的结果是原列表片段的拷贝(新的列表对象),切片范围[start,stop) 左闭右开
lst2=[10,20,30,40,50,60,70,80,90]
print('原列表id',id(lst2))
print(lst2[1:7:2]) #[20, 40, 60]
lst3=lst2[1:7:2]
print('切的片段id',id(lst3))
#step默认为1,可省略
print(lst2[1:6]) #[20, 30, 40, 50, 60]
print(lst2[1:6:]) #[20, 30, 40, 50, 60]
#step为正数,从start开始往后计算切片
# 切片的第一个元素(start)默认是列表的第一个元素
# 切片的最后一个元素(stop)默认是列表的最后一个元素
print(lst2[:3:2]) #[10, 30]
print(lst2[4::2]) #[50, 70, 90]
print(lst2[::1]) #[10, 20, 30, 40, 50, 60, 70, 80, 90]
#step为负数,从start开始往前计算切片
print(lst2[3:0:-1]) #[40, 30, 20]
# 切片的第一个元素(start)默认是列表的最后一个元素
# 切片的最后一个元素(stop)默认是列表的第一个元素
print(lst2[:3:-2]) #[90, 70, 50]
print(lst2[4::-2]) #[50, 30, 10]
print(lst2[::-1]) #[90, 80, 70, 60, 50, 40, 30, 20, 10]
列表元素的判断及遍历
判断指定元素在列表中是否存在:元素 in/not in 列表名
print('p' in 'python') #True
print('h' not in 'python') #False
列表元素的遍历:for 迭代变量 in 列表名 :
lst=[10,20,'python','hello']
for item in lst:
print(item)
运行结果:
列表的增加操作
append()在列表的末尾添加一个元素
lst=[10,20,30]
print('添加元素之前:',lst,id(lst))
lst.append(100)
print('添加元素之后:',lst,id(lst)) #没有创建新的对象
lst1=['hello','world']
lst.append(lst1) #将lst2作为一个元素添加到列表的末尾
print(lst) #[10, 20, 30, 100, ['hello', 'world']]
extend()在列表的末尾至少添加一个元素
lst.extend(lst1) #将lst2作为多个元素一次性添加到列表的末尾
print(lst) #[10, 20, 30, 100, ['hello', 'world'], 'hello', 'world']
注意和append()的区别
insert(插入某位置,插入的元素)在列表的任意位置添加一个元素
lst.insert(1,90)
print(lst) #[10, 90, 20, 30, 100, ['hello', 'world'], 'hello', 'world']
切片[start,stop] 在列表的任意位置添加至少一个元素 将切掉的元素(左开右闭)替换成要添加的元素
lst2=['python',999,'你好']
lst[1:]=lst2
print(lst) #[10, 'python', 999, '你好']
列表元素的删除操作
列表名.remove()一次删除一个元素 重复元素只删除第一个 元素不存在抛出ValueError
lst1=[1,2,3,4,5,6,3,1]
print('列表删除前:',lst1) #[1, 2, 3, 4, 5, 6, 3, 1]
lst1.remove(1)
print('列表删除后:',lst1) #[2, 3, 4, 5, 6, 3, 1]
# lst1.remove(100) #ValueError: list.remove(x): x not in list
列表名.pop(某位置)删除一个指定索引位置上的元素 指定索引不存在抛出IndexError 不指定索引,删除列表的最后一个
lst1.pop(1)
print(lst1) #[2, 4, 5, 6, 3, 1]
# lst1.pop(6) #IndexError: pop index out of range
lst1.pop()
print(lst1) #[2, 4, 5, 6, 3]
列表名.切片 一次至少删除一个元素
print('切片前:',lst1) #[2, 4, 5, 6, 3]
new_list=lst1[1:4] #产生一个新的列表对象
print('切片后:',new_list) #[4, 5, 6]
lst1[1:4]=[]
print(lst1) #[2, 3]
列表名.clear() 清空列表
lst1.clear()
print(lst1) #[]
del 列表名 删除列表
del lst1
# print(lst1) #NameError: name 'lst1' is not defined
列表元素的修改操作
为指定索引的元素赋予一个新值
lst=[1,2,3,4,5]
print('修改前',lst) #修改前 [1, 2, 3, 4, 5]
lst[2]=100
print('修改后',lst) #修改后 [1, 2, 100, 4, 5]
为指定的切片赋予一个新值
lst[1:3]=[111,222,333]
print(lst) #[1, 111, 222, 333, 4, 5]
列表元素的排序操作
调用sort()方法
列表名.sorted(),列表中的所有元素默认按照从小到大的顺序进行排序,可以指定reverse=True,进行降序排序
lst=[52,43,62,52,25,72,92]
print('排序前的列表:',lst,id(lst))
lst.sort() #默认升序
print('默认排序后的列表:',lst,id(lst)) #没有生成新的列表对象
lst.sort(reverse=True)
print('降序排序:',lst)
lst.sort(reverse=False)
print('升序排序:',lst)
调用内置函数sorted()
sorted(列表名),可以指定reverse=True,进行降序排序,创建了一个新的列表,原列表不发生改变
lst=[52,43,62,52,25,72,92]
print('原列表:',lst,id(lst))
new_list=sorted(lst) #创建了一个新的列表对象
print('新列表:',lst,id(new_list))
desc_list=sorted(lst,reverse=True)
print('降序排序:',desc_list)
asc_list=sorted(lst,reverse=False)
print('升序排序:',asc_list)