【Python】关于Python的列表

目录

一、列表的格式,定义列表

二、列表的使用场景

三、列表的增删改查

3.1列表元素的添加append

3.2列表后面添加列表extend

3.3列表的删除---pop、remove、clear、del的区别

3.4列表的插入【列表名.insert(下标,元素)】实现列表元素的插入

3.5列表的查找---index、count

四、列表的常见操作

4.1通过in(元素 in 列表)判断元素是否在列表中

4.2列表的排序sort、reverse

五、关于Python中列表的内存管理底层逻辑

六、案例分享

6.1买多件商品,每个商品的信息中有:商品名称,价格,数量,最后打印购买的商品

6.2生成6个1-100之间的随机整数,保存到列表中,键盘输入一个1-100之间的整数,将整数插入到排序后的列表中(升降没有要求)

6.3不用sort,手动实现冒泡排序


一、列表的格式,定义列表

定义列表的格式:[元素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) #打印

  • 33
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中常用的列表方法有很多,以下是其中几个常用的方法: 1. append()方法:在列表末尾添加新的对象。 ```python list1 = ['hello', 'world', 'python'] list1.append('...') print(list1) # 输出:['hello', 'world', 'python', '...'] ``` 2. extend()方法:在列表末尾一次性追加另一个序列中的多个值。 ```python list1 = ['hello', 'world', 'python'] list2 = ['!', 'I', 'love', 'Python'] list1.extend(list2) print(list1) # 输出:['hello', 'world', 'python', '!', 'I', 'love', 'Python'] ``` 3. insert()方法:将对象插入到列表中的指定位置。 ```python list1 = ['hello', 'world', 'python'] list1.insert(1, 'beautiful') print(list1) # 输出:['hello', 'beautiful', 'world', 'python'] ``` 4. remove()方法:移除列表中某个值的第一个匹配项。 ```python list1 = ['hello', 'world', 'python'] list1.remove('world') print(list1) # 输出:['hello', 'python'] ``` 5. pop()方法:移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。 ```python list1 = ['hello', 'world', 'python'] last_element = list1.pop() print(last_element) # 输出:'python' print(list1) # 输出:['hello', 'world'] ``` 6. sort()方法:对列表进行排序。 ```python list1 = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] list1.sort() print(list1) # 输出:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9] ``` 7. count()方法:统计某个元素在列表中出现的次数。 ```python list1 = ['hello', 'world', 'python', 'world'] count = list1.count('world') print(count) # 输出:2 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值