关于列表的一些操作

获取元素的索引
lst = ['we',123 ,'ppt','chat',123]
print(lst.index(123)) # 获取指定元素的索引,如果列表中存在N个相同元素,只返回相同元素中的第一个元素的索引
print(lst.index('chat',1,4)) # 可以通过索引的范围查找,list.index('要查找的对象',star,stop) [star,stop) 左闭右开区间
获取列表中的元素
print(lst[2])#获取索引为2的元素 (正向索引:0,1,2,3....n)
print(lst[-2])# 获取倒数第2个(索引为-2)的元素 (反向索引:-1.-2.-3....-n)
获取列表中的多个元素(切片操作)
"""
切片语法格式: 列表名[start:stop:step] 切片范围[start,stop) step默认为1,
step为正数时:从start开始往后计算切片 [:stop:step] 切片的第一个元素默认时列表的第一个元素 [start::step] 切片的最后一个元素默认时列表最后一个元素
step为负数时:从start开始往前计算切片 [:stop:step] 切片的第一个元素默认时列表的最后一个元素 [start::step] 切片的最后一个元素默认为列表的第一个元素
"""
lst1 = [100,200,300,400,500,600,700,800,900]
print(lst1[1:6]) #输出结果:[200, 300, 400, 500, 600]
print(lst1[1:6:2]) #输出结果:[200,400,600]
print(lst1[:6:2]) #输出结果:[100,300,500]
print(lst1[2::2]) #输出结果:[300,500,700,900]
print(lst1[::-1]) #输出结果:[900, 800, 700, 600, 500, 400, 300, 200, 100] 倒序
print(lst1[6:1:-1]) #输出结果:[700,600,500,400,300]
print(lst1[6::-2]) #输出结果:[700,500,300,100]
print(lst1[6:0:-2]) #输出结果:[700, 500, 300]
列表元素的增加操作
append() 在列表的末尾添加一个元素
extend() 在列表的末尾至少添加一个元素
insert() 在列表的任意位置添加一个元素
切片 在列表的任意位置添加至少一个元素
lst = [10,22]
lst.append('hello')
print(lst)#[10, 22, 'hello']
## append 与 extend的区别
lst1 = ['a','b',12]
lst2 = ['welcome','hello']
lst1.append(lst2)#把lst2整个列表作为一个元素加入lst1
print(lst1) #['a', 'b', 12, ['welcome', 'hello']]
lst1 = ['a','b',12]
lst1.extend(lst2) #把lst2的元素一个个加入lst1
print(lst1) # ['a', 'b', 12, 'welcome', 'hello']
## insert
lst = ['ww',23.10,30,'A']
lst.insert(1,90) # 在索引为1的位置上添加元素90
print(lst) # ['ww', 90, 23.1, 30, 'A']
## 切片
lst = [1,2,3]
lst1 = ['a','b','c']
lst[1:] = lst1 # 把列表lst中从索引1开始的位置都替换为lst1中元素
print(lst) # [1, 'a', 'b', 'c']
列表元素删除操作
"""
remove(指定元素):1.一次删除一个元素 2.重复元素只删除第一个 3.元素不存在抛出ValueError
pop(索引):1.删除一个指定索引位置上的元素 2.指定索引不存在抛出IndexError 3.不指定索引时,默认删除列表中最后一个元素
切片:1.通过切片截取你想要的那部分,产生一个新的列表对象 2.通过将原列表中指定不要的部分用[]替代
clear():清空列表
del: 删除整个列表对象
"""
remove()
lst2 = [10,20,30,40,50,60,70,80,90,30]
lst2.remove(30)
print(lst2) #输出结果[10, 20, 40, 50, 60, 70, 80, 90, 30]
lst3 = [1,2,3,4,5,6,7,8]
pop()
lst3.pop(3)
print(lst3) #输出结果[1, 2, 3, 5, 6, 7, 8]
lst3.pop() # 如果不指定参数,将删除列表中的最后一个元素
print(lst3) #输出结果[1, 2, 3, 5, 6, 7]
切片
lst4 = [1,2,3,4,5,6,7,8]
new_lst = lst4[1:3]
print(f'原列表:{lst4}') #输出结果[1,2,3,4,5,6,7,8]
print(f'原列表:{new_lst}') #输出结果[1,4,5,6,7,8]
不产生新的列表对象,而是删除原列表中的内容:
lst4[1:3]=[]# 将原列表中[1,3)的位置用[]替代
print(lst4)# 输出结果[1, 4, 5, 6, 7, 8]
clear & del
lst3.clear()
print(lst3) # []
del lst4 # del语句,将列表对象删除
# print(lst4) # NameError: name 'lst4' is not defined 因为对象都不存在了
列表元素的修改操作
"""
1、为指定索引的元素赋予一个新值 2、为指定的切片赋予一个新值
"""
lst5 =[10,20,30,40,50,60]
lst5[2] ='三十' #将索引为2的元素修改为‘三十’
print(lst5) #输出结果 [10, 20, '三十', 40, 50, 60]
lst5[1:3] = ['twenty','thirty']
print(lst5) # 输出结果[10, 'twenty', 'thirty', 40, 50, 60]
lst5[3:4] = ['forty','forty-one','forty-two']
print(lst5) # 输出结果[10, 'twenty', 'thirty', 'forty', 'forty-one', 'forty-two', 50, 60]
列表的排序操作
"""
1、不产生新的列表对象:调用sort()方法,列表中的所有元素默认按照从小到大的顺序进行排序,可以指定reverse=True, 进行降序排序
2、产生新的列表对象:调用内置函数sorted(),可以指定reverse=True,进行降序排序,原列表不发生改变
"""
print('-------------------使用sort()排序,不产生新对象(以下例子中可以看出前后id相同)-------------------------')
lst = [30,12,4,2,1,6,290,22,3]
print('排序前的列表', lst, id(lst)) #输出结果:排序前的列表[30, 12, 4, 2, 1, 6, 290, 22, 3] 2449346640584
lst.sort()
print('从小到大排序后的列表', lst, id(lst)) #输出结果:从小到大排序后的列表[1, 2, 3, 4, 6, 12, 22, 30, 290] 2449346640584
lst.sort(reverse=True)
print('降序排序后的列表', lst, id(lst)) #输出结果:降序排序后的列表[290, 30, 22, 12, 6, 4, 3, 2, 1] 2449346640584
print('-------------------使用内置函数sorted()排序,将产生一个新的列表对象,原列表不发生改变---------------------')
lst = [22,1,33,44,11,99,66,32]
print('原列表', lst) # 原列表[22, 1, 33, 44, 11, 99, 66, 32]
new_lst = sorted(lst)
print('重新输出原列表',lst) # 重新输出原列表[22, 1, 33, 44, 11, 99, 66, 32]
print('排序后的列表',new_lst) # 排序后的列表[1, 11, 22, 32, 33, 44, 66, 99]
# 实现降序排序
new_lst = sorted(lst,reverse=True)
print(new_lst) # [99, 66, 44, 33, 32, 22, 11, 1]
列表生成式(列表推导式)

l1 = []
for i in range(1,10):
l1.append(i)
# 以上写法可以用列表推导式简写:
l2 =[i for i in range(1,10)]
print(f'l1:{l1}')
print(f'l2:{l2}')
# 加判断条件 满足偶数条件才放到列表当中
l3 = [i for i in range(1,10)if i%2==0]
print(f'l3:{l3}')
# 包含循环嵌套和判断筛选
##需求描述:从列表中取到偶数,得到一个新列表
l5 = [[1,2,3], [4,5,6], [7,8,9]]
l6 = []
for y in l5:
for x in y:
if x%2 ==0:
l6.append(x)
print(f'l6:{l6}')
##写成列表推导式
l7 = [x for y in l5 for x in y if x%2==0]
print(f'l7:{l7}')