Python中的list列表类型

Day 06 数据类型(中)

文章目录


常见的数据类型,int、bool、str、list、tuple、dict、set、float

  • int,整型数据类型
  • float,浮点类型
  • str,字符串类型
  • bool,布尔类型
  • list,列表类型
  • set,集合类型
  • dict,字典类型
  • tuple,元组类型

每种数据类型都有自己的特点及应用场景,以后的开发中需要根据实际的开发情况选择合适的数据类型。

list,列表类型,用于存储一些数据的容器(有序&可修改)。【80%】

tupe,元组类型,用于存储一些数据的容器(有序&不可修改)。【20%】

1. 列表

列表(list),是一个有序可变的容器,在里面可以存放多个不同类型的元素。

1.1 列表的定义

user_list = ["卢梭","歌德","黑格尔","尼采"]
num_list = [1,2,3,4,5,66,77,88,99]
data_list = [180,"李四",True]

user_list = []
user

1.2 列表的独有功能

Python中为所有的列表类型的数据提供了一批独有的功能。
在开始学习列表的独有功能之前,先来做一个字符串和列表的对比∶

  • 字符串,不可变,即:创建好之后内部就无法修改。【独有功能都是新创建一份数据】
name = "锤娜丽莎"
data = name.replace("锤","蒙")
print(name)
print(data)
#锤娜丽莎
#蒙娜丽莎
  • 列表,可变,即:创建好之后内部元素可以修改。【独有功能基本上都是直接操作列表内部,不会创建新的一份数据】
name = ["锤","娜","丽","莎"]
print(name)
name[0] = "蒙"
print(name)

列表的常见独有功能:

1.2.1 列表的追加,将数据添加到列表的尾部:
data_list = []
v1 = input("请输入1:")
data_list.append(v1)
v2 = input("请输入2")
data_list.append(v2)
print(data_list)
  • 案例1
user_list = []
i = 1
while True:
    user_input = input("请输入第{}个数据,输入Q退出。".format(i))
    i+=1
    if user_input.upper() == "Q":
        break
    user_list.append(user_input)
print(user_list)
  • 案例2
welcome = "游戏加载完成".center(30,"*")
print(welcome)
user_count = 0
user_list = []
while True:
    input_number = input("请输入游戏人数:")
    if input_number.isdecimal():
        user_count = int(input_number)
        break
    else:
        print("输入有误")
message = "{}人参加游戏".format(user_count)
print(message)
# i = 1
# while i<=user_count:
#     tips=("请输入玩家姓名({}/{})".format(i,user_count))
#     user = input(tips)
#     user_list.append(user)
#     i=i+1
# print(user_list)
for i in range(1,user_count+1):
    tips = ("请输入玩家姓名({}/{})".format(i, user_count))
    user = input(tips)
    user_list.append(user)
print(user_list)
1.2.2 批量追加,将一个列表中的元素逐渐添加到另一个列表中
tools = ["电脑","手机","平板"]
tools.extend([1,2,3])
print(tools)
#也可
t1 = [1,4,7,2]
tools.extend(t1)
print(tools)
#等价于
tools = ["电脑","手机","平板"]
t1 = [1,4,7,2]
for item in t1:
    tools.append(item)
print(tools)
1.2.3 在原列表的指定索引位置插入值
user_list = ["卢梭","歌德","黑格尔","尼采"]
user_list.insert(0,"孟德斯鸠")
print(user_list)

user_list.insert(2,"弗洛伊德")
print(user_list)

#['孟德斯鸠', '卢梭', '歌德', '黑格尔', '尼采']
#['孟德斯鸠', '卢梭', '弗洛伊德', '歌德', '黑格尔', '尼采']

#案例
name_list = []

while True:
    name = input("请输入用户姓名:(Q/q退出)")
    if name.upper() == "Q":
        print("程序退出!")
        break
    if name.startswith("张") :
        name_list.insert(0,name)
    else:
        name_list.append(name)
print(name_list)
1.2.4 根据值在原列表之中删除对应值,(无对应值则会报错)[从左到右找到的第一个删除]
jiangpin_list = ["iphone14","IPAD2023","充气女友",'电动座椅','新冠']

jiangpin_list.remove("新冠")
print(jiangpin_list)
#案例
#输入数字抽奖
import random

jiangpin_list = ["iphone14","IPAD2023","充气女友",'电动座椅','水床','筋膜枪']

while jiangpin_list:
    user_input = input("请输入姓名进行抽奖:")
    value = random.choice(jiangpin_list)
    print("恭喜{},抽中 {} 一件 ".format(user_input,value))
    jiangpin_list.remove(value)
1.2.5 在原列表中根据索引值踢出对应数据
jiangpin_list = ["iphone14","IPAD2023","充气女友",'电动座椅','新冠']

last = jiangpin_list.pop()
second = jiangpin_list.pop(1)

print(last)
print(second)
#案例
#排队买火车票
user_name = []

while True :
    name = input("请输入乘客姓名进行购买,(Q/q结束退出:)")
    if name.upper() == "Q":
        break
    user_name.append(name)
#print(user_name)
user_Count = 5
for i in range (user_Count):
    item = user_name.pop(0)
    message = "恭喜{},车票购买成功!".format(item)
    print(message)
faild_user = "、".join(user_name)#DAY05 3.2.8字符串的拼接,得到新的字符串(join)
faild_message = "抱歉,票已售完,一下用户请选择其他出行方式,名单:{}".format(faild_user)
print(faild_message)
1.2.6 清空源列表
jiangpin_list = ["iphone14","IPAD2023","充气女友",'电动座椅','新冠']
print(jiangpin_list)

jiangpin_list.clear()
print("清空后")
print(jiangpin_list)
1.2.7 根据数据值获取数据所在的索引值,从左到右寻找到的第一个,没有则会报错
jiangpin_list = ["iphone14","IPAD2023","充气女友",'电动座椅','新冠']
if "新冠" in jiangpin_list:
    index = jiangpin_list.index("新冠")
    print(index)
else:
    print("数据不存在")
1.2.8 列元素排序
#排序默认从小到大

#数字排序
num_list = [2,1,4,6,89,9,8,56,56,65,55,89,77,97,8,5648,89]
print("排序前")
print(num_list)
num_list.sort()
print("排序1")
print(num_list)
#反转顺序可以
num_list.sort(reverse=True)
print("排序2")
print(num_list)

#字符串排序

jiangpin_list = ["iphone14","IPAD2023","充气女友",'电动座椅','新冠']
print("排序前")
print(jiangpin_list)

jiangpin_list.sort()
print("排序后")
print(jiangpin_list)
"""
sort排序原理
首先将字符串中的每一个字符转换为Unicode码
然后进行同位置比较
相同继续后比,不同谁小谁在前
"""
#验证如何排序
name_list = ["王仙芝","徐凤年","青鸟","李淳罡"]
data_list = []
data = "青鸟"
#王仙芝
#[29579, 20185, 33437]
#徐凤年
#[24464, 20964, 24180]
# 青鸟
# [38738, 40479]
for char in data:
    v1 = ord(char)
    data_list.append(v1)
print(data)
print(data_list)

name_list.sort()
print(name_list)

注意︰排序时内部元素无法进行比较时,程序会报错(尽量数据类型统一)。

1.2.9 反转原列表
name1_list = ["王仙芝","徐凤年","青鸟","李淳罡"]
print(name_list)
name_list.sort(reverse=True)
print(name_list)

1.3 列表的公共功能

1.3.1 相加,两个列表相加得到新的列表
name1_list = ["王仙芝","徐凤年","青鸟","李淳罡"]
print(name1_list)
name2_list = ["卢梭","歌德","黑格尔","尼采"]
print(name2_list)
v = name1_list+name2_list
#print(name1_list+name2_list)
print(v)

#['王仙芝', '徐凤年', '青鸟', '李淳罡']
#['卢梭', '歌德', '黑格尔', '尼采']
#['王仙芝', '徐凤年', '青鸟', '李淳罡', '卢梭', '歌德', '黑格尔', '尼采']
1.3.2 相乘,列表*整型,将原来的列表元素创建N份并生成一个新的列表
name2_list = ["卢梭","歌德","黑格尔","尼采"]

v = name2_list*2
print(v)
#D:\Python39\python.exe E:/Python/练习/路飞/Day02/列表的公共功能
['卢梭', '歌德', '黑格尔', '尼采', '卢梭', '歌德', '黑格尔', '尼采']
1.3.3 运算符in包含

由于列表内部是由多个元素组成,可以通过in来判断元素是否在列表中。

name2_list = ["卢梭","歌德","黑格尔","尼采"]
result1 = "卢梭" in name2_list
result2 = "小小酥" in name2_list
result3 = "小小酥" not in name2_list
print(result1)
print(result2)
print(result3)

#True
#False
#True
name2_list = ["卢梭","歌德","小小酥","黑格尔","尼采"]

if "小小酥" in name2_list:
    #小小酥可以换为用户输入
    print("{}在名单中,删除".format("小小酥"))
    name2_list.remove("小小酥" )
else:
    print("{}不在列表中".format("小小酥"))

1.3.4 获取列表长度
name2_list = ["卢梭","歌德","小小酥","黑格尔","尼采"]
list_Length = len(name2_list)
print(list_Length)

#5
1.3.5 索引
#读
name2_list = ["卢梭","歌德","小小酥","黑格尔","尼采"]

print(name2_list[0])
print(name2_list[1])
print(name2_list[2])
print(name2_list[3])
print(name2_list[4])
print("间隔".center(30,"*"))
for i in range(len(name2_list)):

    item = name2_list.pop(0)

    print(item)
    
#卢梭
#歌德
#小小酥
#黑格尔
#尼采
#**************间隔**************
#卢梭
#歌德
#小小酥
#黑格尔
#尼采
#改
name2_list = ["卢梭","歌德","小小酥","黑格尔","尼采"]
print(name2_list)
name2_list[0] = "SB"
print(name2_list)
# ['卢梭', '歌德', '小小酥', '黑格尔', '尼采']
# ['SB', '歌德', '小小酥', '黑格尔', '尼采']



#删
name2_list = ["卢梭","歌德","小小酥","黑格尔","尼采"]
del name2_list[0]
print(name2_list)
#['歌德', '小小酥', '黑格尔', '尼采']
  • 注意:超出索引范围会报错。
  • 提示∶由于字符串是不可变类型,所以他只有索引读的功能,而列表可以进行读、改、删
1.3.6 切片
name2_list = ["卢梭","歌德","小小酥","黑格尔","尼采"]
#读
print(name2_list[0:2])
print(name2_list[2:4])
# ['卢梭', '歌德']
# ['小小酥', '黑格尔']

#改
name2_list[0:2] = [1,2]
print(name2_list)
#[1, 2, '小小酥', '黑格尔', '尼采']
name2_list[2:] = [1,2,3]
print(name2_list)
name2_list[:3] = [1,2,3]
print(name2_list)
#[1, 2, 3, '黑格尔', '尼采']

#删

del name2_list[0:2]
print(name2_list)
#['小小酥', '黑格尔', '尼采']
1.3.7 步长
name2_list = ["卢梭","歌德","小小酥","黑格尔","尼采"]
print(name2_list)
print(name2_list[0::2])
print(name2_list[0:2:2])
print(name2_list[4::-1])
# ['卢梭', '歌德', '小小酥', '黑格尔', '尼采']
# ['卢梭', '小小酥', '尼采']
# ['卢梭']
# ['尼采', '黑格尔', '小小酥', '歌德', '卢梭']

#案列:实现列表的反转
print(name2_list[::-1])
# ['尼采', '黑格尔', '小小酥', '歌德', '卢梭']

name2_list.reverse()
print(name2_list)
#['尼采', '黑格尔', '小小酥', '歌德', '卢梭']
1.3.8 for循环
name2_list = ["卢梭","歌德","小小酥","黑格尔","尼采"]

for item in name2_list:
    print(item)
# 卢梭
# 歌德
# 小小酥
# 黑格尔
# 尼采
for index in range(len(name2_list)-1, -1, -1):
    item = name2_list[index]
    print(item)
    
# 卢梭
# 歌德
# 小小酥
# 黑格尔
# 尼采
  • 切记,循环的过程中对数据进行删除会踩坑【面试题】
user_list =  ["1卢梭","1歌德","1小小酥","1黑格尔","尼采"]
#错误删除方式
for item in user_list:
    if item.startswith("1"):
        user_list.remove(item)
print(user_list)
#千万不要在循环的过程中,边循环获取列表的数据边副除列表的数据,在循环的过程中索引值也在变化话,删除后的数据列表会延续原列表顺序继续
#即导致顺序混乱

#正确方式
for index in range(len(user_list)-1,-1,-1):
     item = user_list[index]
     if item.startswith("1"):
         user_list.remove(item)
print(user_list)

#['1歌德', '1黑格尔', '尼采']
#['尼采']

1.4 转换

  • int 、bool无法转换成列表
  • str
name = "孟德斯鸠"
data =list(name)
print(data)

#['孟', '德', '斯', '鸠']
  • 元组
v1 = (11,22,33,44,55,66)#元组的元素不可修改
v2 = list(v1)
print(v1)
print(v2)

#(11, 22, 33, 44, 55, 66)
#[11, 22, 33, 44, 55, 66]

v3 = {"john","alex","ken","steven"}
v4 = list(v3)
['ken', 'alex', 'steven', 'john']

1.5 其他

1.5.1 嵌套

列表属于容器,内部可以存放各种数据,所以他支持列表的嵌套,如:

data = ["卢梭","弗洛伊德",["alex","john"],True,[11,22,33,],"孟德斯鸠","尼采"]

#对于嵌套的值,可以根据之前学习的索引知识点来进行学习,例如:
data = ["卢梭","弗洛伊德",["alex","john"],True,[11,22,33,],"孟德斯鸠","尼采"]

print(data)
print(data[0])
print(data[0][1])
print(data[2][1])
print(data[4][2])
print(data[2][-1])
print(data[4][-1])

data.append(666)

del data[2]

print(data)

#['卢梭', '弗洛伊德', ['alex', 'john'], True, [11, 22, 33], '孟德斯鸠', '尼采']
# 卢梭
# 梭
# john
# 33
# john
# 33
# ['卢梭', '弗洛伊德', True, [11, 22, 33], '孟德斯鸠', '尼采', 666]
#创建用户列表
#[["alex",666],["john",888]] 
user_list = []

while True:
    user = input("请输入用户名(Q/q退出):")
    pwd = input("请输入密码")
    if user.upper() == "Q":
        break
    son_list = [user,pwd]
    # son_list.append(user)
    # son_list.append(pwd)
    user_list.append(son_list)
    print(user_list)

1.6 列表阶段作业

1.写代码,有如下列表,按照要求实现每一个功能
li = ["alex","Asir","officer","buff","logo"]
计算列表长度并输出

li_longth = len(li)
print(li_longth)
列表中追加元素"GG"并输出添加后的列表
li.append("GG")
print(li)
在列表第1个索引位置插入“Order”,输出添加后的列表
li.insert(0,"Order")
print(li)
在列表第2个索引位置插入“Order”,输出添加后的列表
li.insert(1,"pengju")
print(li)
在列表第3个索引位置插入“Order”,输出添加后的列表
li.insert(2,"绝笔")
print(li)
将列表data = [“548”,“2464”,“6364”,“546”]中的每一个元素追加到li列表中,并输出修改后的列表

data = ["548","2464","6364","546"]
# li.append(data)
# li.extend(data)
# print(li)
for item in data:
    li.append(item)
print(li)
将字符串s = "Apple"中的每一个元素添加到列表中并输出
s = "Apple"
for item in s:
    li.append(item)
# li.extend(s)
print(li)
删除列表中的“buff”元素,并输出修改后的列表
li.remove("buff")
print(li)
删除列表中的第2个元素,并输出修噶后的列表

# li.remove(li[1])
li.pop(1)
print(li)
删除列表中的第2-4个元素,并输出修噶后的列表
del li[1:4]
print(li)
2.写代码,有如下列表,利用切片实现每一个功能
li = [1,2,3,"a",4,"b",5,"c",6]
# 切片形成新的列表【1,2,3】
new_li = li[0:3]#前取后不取
print(new_li)
通过对li列表的切片形成新的列表[“a”,4,“b”]
new_li_1 = li[3:6]
print(new_li_1)
通过对li列表的切片形成新的列表[1,3,4,5]
new_li_2 = li[0:7:2]
print(new_li_2)
通过对li列表的切片形成新的列表[2,“a”,“b”]
new_li_3 = li[1:6:2]
print(new_li_3)
通过对li列表的切片形成新的列表[2,“a”,“b”,“c”]
new_li_4 = li[1::2]
print(new_li_4)
通过对li列表的切片形成新的列表[“c”]
new_li_5 = li[7:8]
print(new_li_5)
通过对li列表的切片形成新的列表[“b”,“a”,2]
new_li_6 = li[5::-2]
print(new_li_6)
3. 写代码,有如下列表,按照要求实现每一个功能
li = [2,3,"a",["qwe",20,["aa",["bb",4,"2"]],66],"xx","avi"]
将列表lis中的第2个索引位置的值变成大写,并打印列表。
li[2] = li[2].upper()
print(li)
将列表中的数字3变成字符串"100"
li[1] = "100"
print(li)
将列表中的字符串"aa"变成数字101
li[3][2][0] = 101
print(li)
在"qwe"前面插入字符串:“火车头”
li[3].insert(0,"火车头")
print(li)
4.请用代码实现循环输出元素和值: users =[“aa”,“bb”,“cc”],如:
users =["aa","bb","cc"]
for item in users:
    print(item)
    #user = item
    #print(user)
5. 写代码实现以下功能
如有变量goods =[“汽车”,“飞机”,“火箭”]提示用户可供选择的商品:
goods =["汽车","飞机","火箭"]
i = 0
for item in goods:
    
    print(i,item)
    i = i + 1
根据输入的索引值,输出对应商品如:输入0,输出您选择的商品为汽车
num = input("请输入您的选择:")
if num.isdecimal():
    print(num)
    print("您选择的商品为:",goods[int(num)])
else:
    print("您的输入有误")
利用for循环和range找出0~50以内能被3整除的数,并追加到一个列表。
li =[]
for item in range(0,50):
    if item % 3 == 0:
        li.append(item)
print(li)
#[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48]
利用for循环和range找出0~50以内能被3整除的数,并插入到第0的索引位置。
li =[]
for item in range(0,50):
    if item % 3 == 0:
        li.insert(0,item)
print(li)
#[48, 45, 42, 39, 36, 33, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3, 0]
移除下方列表中的所有元素的空格并将所有以a开头的元素添加到一个新列表中并输出
li = ["abc","bc d "," adasd ","  sdsad"," asas "," sas","sss"," asd"]
new_li = []
for item in li:
    mid = item.strip()
    if mid.startswith("a"):
        new_li.append(mid)
print(new_li)
#['abc', 'adas d', 'asas', 'asd']
将下方列表中以a开头的元素添加到一个新列表中,并计算出数量后输出
li = ["abc","bc d ","adasd ","sdsad","asas ","sas","sss","asd"]
count = 0
new_li = []
for item in li:
    if item.startswith("a"):
        new_li.append(item)
        count = count+1
print(new_li,count)
#['abc', 'adasd ', 'asas ', 'asd'] 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值