目录
3.3列表的删除---pop、remove、clear、del的区别
3.4列表的插入【列表名.insert(下标,元素)】实现列表元素的插入
6.1买多件商品,每个商品的信息中有:商品名称,价格,数量,最后打印购买的商品
6.2生成6个1-100之间的随机整数,保存到列表中,键盘输入一个1-100之间的整数,将整数插入到排序后的列表中(升降没有要求)
一、列表的格式,定义列表
定义列表的格式:[元素1,元素2,元素3,元素4.....]
list1的类型为列表
list1=['胡萝卜','红色',10,5.8]
列表中的元素可以是不同的类型
二、列表的使用场景
列表里面的类型可以是 有整型 浮点 字符串 以及布尔类型等基本类型
列表里面可以套列表等
有内容的列表
字符串类型str:['A','B','C'...]
整型int:[1,2,3,4,5...]
浮点型float:[3,5,2.3,10.8...]
列表list:[[],[],[],[],...]
元组tuple:[(),(),()...]
字典dict:[{},{},{}...]
列表也是有索引和下标的
举个例子:
列表类型的索引与字符串类似的
list1=['牛奶', '面包', '火腿', '培根', '牛奶', '可乐', '草莓', '鸡蛋', '大米', '面条']
print(list1[::-1])#倒序输出
print(list1[2:6:2])#索引为2345中取值步进为2,也就是索引为2和4
print(list1[2]) #输出列表中索引为2的值
print(type(list1[2])) #查看输出结果的类型,取值的结果是元素本身的类型
print(list1[2:3])
print(type(list1[2:3])) #查看输出结果的类型,切片的结果是列表
print(list1[-1:-5:-2])#索引为-1 -2 -3 -4 中取值步进为-2,也就是索引-1和-3并且倒序输出
print(list1[::3]) #正序输出,步进为3
print(list1[::-3]) #倒序输出,步进为3
三、列表的增删改查
3.1列表元素的添加append
append的添加有点类似于排队等待的追加,默认在最后添加
3.2列表后面添加列表extend
extend用于在原有的列表后面追加一个列表,另外“+”也可以
list1=['牛奶', '面包','火腿', '培根', '牛奶', '可乐']
print(list1)
list1.append('草莓') #表示追加一个元素,默认是在最后加
print(list1)
list2=['鸡蛋','大米','面条']
list1.extend(list2) #表示追加列表,默认追加在列表后面
print(list1)
list3=list1+list2 #‘+’号也是表示追加列表,默认按顺序拼接
print(list3)
要知道,有“+”符号的几种作用
在列表类型中,可以表示添加
在字符串类型中,表示拼接
在数字类型中,表示数学运算
list1=['牛奶', '面包','火腿', '培根', '牛奶', '可乐']
list2=['鸡蛋','大米','面条']
list3=list1+list2 #‘+’号也是表示追加列表,默认按顺序拼接
print(list3)
str1='aa'+'bb' #字符串的‘+’表示拼接
print(str1)
num=1+2 #数字的‘+’表示数学运算
print(num)
3.3列表的删除---pop、remove、clear、del的区别
pop根据索引位置删除一个元素
##列表.pop(索引位置) 这是根据索引的位置来删除元素
list1=['牛奶', '面包','火腿', '培根', '牛奶', '可乐']
list1.pop(3) #删除培根
print(list1)
list1.pop(1) #删除面包
print(list1)
list1.pop(-1) #删除可乐
print(list1)
list1.pop(6) #删除超出范围的索引位置
如果pop()没有index,默认为-1
list1=['牛奶', '面包','火腿', '培根', '牛奶', '可乐']
list1.pop() #默认index为-1
print(list1)
remove根据元素值删除,删除默认从左往右的第一个元素
##列表.pop(元素) 这是根据元素值来删除元素,默认为从左到右第一个
list1=['牛奶', '面包','火腿', '培根', '牛奶', '可乐']
list1.remove('牛奶') #删除第一个牛奶
print(list1)
list1.remove('辣条') #删除不存在的辣条
print(list1)
如果删除多个相同的元素,那么就需要循环
但是有一种方式是即使用了循环也会删除不了所有,这是为什么呢?
建议if不要用i==值来判断,采用元素 in 列表来判断!!!
因为在每一次的循环中,i的取值是根据索引来的,删除以后,索引也会改变
# 如果删除多个相同的元素,需要循环
# 为什么没有连续的可以正常删除 但是连续的话 会被删除,因为删除的时候 根据下标来的 那么删除以后 元素的下标修改了
list1=['牛奶','牛奶','牛奶', '面包','火腿', '培根', '牛奶', '可乐']
for i in list1:
if i == '牛奶':
list1.remove(i)
print(list1)
删除多个相同的元素的几种方法:
方案一:
list1=['牛奶','牛奶','牛奶', '面包','火腿', '培根', '牛奶', '可乐', '牛奶']
n=0
while n < len(list1): #n表示循环的次数,总共循环的次数是索引的值,0--len()-1
if list1[n] == '牛奶': #这里的n是一个值,那么list[n]才是需要去判断的元素值
list1.remove(list1[n]) #删除,并且索引下标不变!!!
else:
n+=1
print(list1)
方案二:
list1=['牛奶','牛奶','牛奶', '面包','火腿', '培根', '牛奶', '可乐']
for i in list1:
if '牛奶' in list1:
list1.remove('牛奶')
print(list1)
方案三:反着遍历
list1=['牛奶','牛奶','牛奶', '面包','火腿', '培根', '牛奶', '可乐']
for i in list1[::-1]: #反着遍历的时候
if i == '牛奶':
list1.remove(i)
print(list1)
方法四:可以通过count和remove结合!!!
list1=['牛奶','牛奶','牛奶', '面包','火腿', '培根', '牛奶', '可乐']
for i in range(list1.count('牛奶')): #重复几次就是循环删除的次数
list1.remove('牛奶')
print(list1)
clear和del的区别
list1=['牛奶','牛奶','牛奶', '面包','火腿', '培根', '牛奶', '可乐']
list1.clear() #表示删除列表的所有元素,此时列表为空,但是列表本身还在
print(list1)
list1=['牛奶','牛奶','牛奶', '面包','火腿', '培根', '牛奶', '可乐']
del list1 #表示列表不存在了
print(list1)
3.4列表的插入【列表名.insert(下标,元素)】实现列表元素的插入
list1=['牛奶','牛奶','牛奶', '面包','火腿', '培根', '牛奶', '可乐']
list1.insert(2,'辣条') #表示插队,在index为2的位置插入一个值,其他值往后移
print(list1)
另外除了插入还有修改
list1[0]='芬达' #直接修改
print(list1)
3.5列表的查找---index、count
可以根据元素的值 查找元素的位置,没有find!!!
list1=['牛奶','牛奶','牛奶', '面包','火腿', '培根', '牛奶', '可乐']
weizhi=list1.index('面包') #找到面包对应的索引的值
print(weizhi)
weizhi=list1.index('牛奶') #找到面包对应的索引的值,如果有多个,默认返回第一个索引值
print(weizhi)
num=list1.count('牛奶') #获取列表中出现某个元素的次数
print(num)
四、列表的常见操作
4.1通过in(元素 in 列表)判断元素是否在列表中
#因为删除元素之前如果不知道元素是否存在,不存在的话remove会报错
#如果说是有多个元素,那么如何删除相同的元素牛奶
list1=['牛奶','牛奶','牛奶', '面包','火腿', '培根', '牛奶', '可乐']
for i in list1:
if '牛奶' in list1:
list1.remove('牛奶')
print(list1)
4.2列表的排序sort、reverse
list1=[1,3,6,2,4,8]
list1.sort() #默认是升序,直接调用即可
print(list1)
list1=[1,3,6,2,4,8]
list1.sort()#默认是升序,直接调用即可,reverse=False
print(list1)
list1=[1,3,6,2,4,8]
list1.sort(reverse=True)#降序需要将reverse设置为True
print(list1)
列表.reverse()倒序输出
list1=[1,3,6,2,4,8]
list1.reverse() #表示讲列表倒序输出,有点类似list[::-1]
print(list1)
五、关于Python中列表的内存管理底层逻辑
list1=[1,3,2,4,6,8]
print(id(list1))
list2=list1 #只要出现这种!!后面改变其中一个列表的元素,另一个跟着改变
list2.append(100) #虽然只改变了list2,但是list1同样会被改变
print(list1)
print(id(list2))
Del表示删除了指针
clear表示清空了数据,但是指针还在
list1=[1,3,2,4,6,8]
list2=list1 #只要出现这种!!后面改变其中一个列表的元素,另一个跟着改变
list2.clear() #清空list2,同样list1也会清空
print(list1)
del list2 #但是删除了list2的表结构,另外一个表还在,这个需要转变一下思路
print(list1)
print(list2)
六、案例分享
6.1买多件商品,每个商品的信息中有:商品名称,价格,数量,最后打印购买的商品
'''买多件商品,每个商品的信息中有:商品名称,价格,数量,最后打印购买的商品'''
mylist=[]
total_num=0
total_money=0
while True:
# choice = input('是否添加你购买的商品(y/n)')
# if choice =='y':
choice = input('是否添加你购买的商品(yY/nN)') #可以支持大写和小写
if choice.lower() =='y': #表示转换为小写后,为y即可
name=input('请输入购买商品的名称')
price=input('请输入购买商品的金额')
num=input('请输入购买商品的数量')
list1=[name,price,num] #一个商品的信息有很多,需要的是一个列表
mylist.append(list1) #多个商品,那么就是列表的元素为列表
else:
print(mylist)
for good in mylist:
total_num+=int(good[2]) #键盘输入的类型都是字符串!!需要格式转化
total_money+=float(good[1])*int(good[2])
print('总计购买商品{}件,花费{}元'.format(total_num,total_money))
#输出的方式有很多,还可以修改为这个
#print('总计购买商品%s件,花费%.2f元'%(total_num, total_money))
break
如果还需要遍历打印出内容
print('商品名称'.ljust(8),'商品单价'.ljust(8),'商品数量'.ljust(8))
for good in mylist:
print(good[0].ljust(8), good[1].ljust(8), good[2].ljust(8))
6.2生成6个1-100之间的随机整数,保存到列表中,键盘输入一个1-100之间的整数,将整数插入到排序后的列表中(升降没有要求)
Python有很多现成的封装,sort就是其中一个
import random
list1=[]
for i in range(6):
num=random.randint(1,100) #产生一个1-100的随机数
list1.append(num) #将该数加入到列表中
print(list1) #打印
num2=int(input("请输入一个1-100的整数:"))
list1.append(num2)
list1.sort(reverse=True) #将数据倒序排序
print(list1)
6.3不用sort,手动实现冒泡排序
import random
list1=[]
for i in range(6):
num=random.randint(1,100) #产生一个1-100的随机数
list1.append(num) #将该数加入到列表中
print(list1) #打印
#手动实现冒泡排序
for i in range(0,len(list1)-1): #这是循环的轮次
for j in range(0,len(list1)-1-i): #这是单词需要比较的次数
if list1[j] >= list1[j+1]: #每次会角逐出一名最大值
list1[j],list1[j+1]=list1[j+1],list1[j]
print(list1) #打印