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