day06 数据类型(中)
常见的数据类型:
- int,整数类型(整形)
- bool,布尔类型
- str,字符串类型
- list,列表类型
- tuple,元组类型
- dict,字典类型
- set,集合类型
- float,浮点类型(浮点型)
目标:掌握列表和元组数据类型的各种操作(知识点应用案例)。
课程概要:
- list,列表类型,用于存储一些数据的容器(有序 & 可修改)。
- tuple,元组类型,用于存储一些数据的容器(有序 & 不可修改)。
1.列表(list)
列表(list),是一个有序且可变的容器,在里面可以存放多个不同类型的元素。
1.1 定义
# 常见列表示例:
user_list = ["轩老师","坂井泉水","藤原拓海"]
number_list = [98,88,666,12,-1]
data_list = [1,True,"Alex","宝强","乃亮"]
# 列表是一个有序且可变的容器,示例:
user_list = []
user_list.append("铁锤")
user_list.append(123)
user_list.append(True)
print(user_list)
#输出结果:
["铁锤",123,True]
列表与前面所学的数据类型的区别:
-
不可变类型:字符串、布尔、整型(最小单位,内部数据无法进行修改)
-
可变类型:列表(内部数据元素可以修改)
1.2 独有功能
在开始学习列表的独有功能之前,先来做一个字符串和列表的对比:
-
字符串,不可变,即:创建好之后内部就无法修改。
name = "alex" data = name.upper() print(name) print(data) # 输出结果: alex ALEX
-
列表,可变,即:创建好之后内部元素可以修改。
user_list = ["车子","房子"] user_list.append("票子") print(user_list) # 输出结果: ["车子","房子","票子"]
列表中的常见独有功能如下:
1.2.1 追加(append)
data_list = []
v1 = input("请输入姓名") # alex
data_list.append(v1)
v2 = input("请输入姓名") # eric
data_list.append(v2)
print(data_list)
# 输出结果:
["alex","eric"]
user_list = []
while True:
user = input("请输入用户名(Q退出):")
if user == "Q":
break
user_list.append(user)
print(user_list)
welcome = "欢迎使用NB游戏".center(30, '*')
print(welcome)
user_count = 0
while True:
count = input("请输入游戏人数:")
if count.isdecimal():
user_count = int(count)
break
else:
print("输入格式错误,人数必须是数字。")
message = "{}人参加游戏NB游戏。".format(user_count)
print(message)
# 通过输入玩家姓名,存入列表中并输出
user_name_list = []
for i in range(1, user_count + 1):
tips = "请输入玩家姓名({}/{}):".format(i, user_count)
name = input(tips)
user_name_list.append(name)
print(user_name_list)
1.2.2 extend()
批量追加,将一个列表中的元素逐一添加另外一个列表。
tools = ["搬砖","菜刀","榔头"]
tools.extend( [11,22,33] )
print(tools)
# 输出结果:
["搬砖","菜刀","榔头",11,22,33]
tools = ["搬砖","菜刀","榔头"]
weapon = ["AK47","M6"]
tools.extend(weapon)
print(tools)
# 输出结果:
["搬砖","菜刀","榔头","AK47","M6"]
tools = ["搬砖","菜刀","榔头"]
weapon = ["AK47","M6"]
for item in weapon:
tools.append(item)
print(tools)
# tools.extend(weapon) 等价于遍历weapon中的元素,逐一添加到tools中
# 输出结果:
["搬砖","菜刀","榔头","AK47","M6"]
1.2.3 insert()
插入,在原列表的指定索引位置插入值.
user_list = ["轩老师","坂井泉水","藤原拓海"]
user_list.insert(0,"容嬷嬷")
user_list.insert(2,"小燕子")
print(user_list)
# 输出结果:
["容嬷嬷","轩老师","小燕子","坂井泉水","藤原拓海"]
name_list = []
while True:
name = input("请输入购买火车票用户姓名(Q/q退出):")
if name.upper() == "Q":
break
if name.startswith("刁"):
name_list.insert(0, name)
else:
name_list.append(name)
print(name_list)
# 通过insert(),把所有姓刁的用户放在列表的前面,其他用户放在列表的后面
1.2.4 remove()
在原列表中根据值删除(从左到右找到第一个删除)。注意:如果要删除的元素在列表中不存在,则会报错。
user_list = ["宝强","羽凡","Alex","乃亮","Alex"]
user_list.remove("Alex")
print(user_list)
# 输出结果: ["宝强","羽凡","乃亮","Alex"]
user_list = ["宝强","羽凡","Alex","乃亮","Alex"]
if "Alex" in user_list:
user_list.remove("Alex")
print(user_list)
# 输出结果: ["宝强","羽凡","乃亮","Alex"]
user_list = ["宝强","羽凡","Alex","乃亮","Alex"]
while True:
if "Alex" in user_list:
user_list.remove("Alex")
else:
break
print(user_list)
# 输出结果: ["宝强","羽凡","乃亮"]
import random
data_list = ["iphone13", "二手电动车", "一包纸巾", "印度5日游", "床上三件套"]
while data_list:
name = input("自动抽奖程序,请输入自己的姓名:")
# 随机从data_list抽取一个值出来
value = random.choice(data_list)
print( "恭喜{},抽中{}.".format(name, value) )
data_list.remove(value)
# 通过random.choice()随机从列表中抽取一个元素,再用remove()将该元素从列表中删除,实现自动抽奖程序
1.2.5 pop()
在原列表中根据索引踢出某个元素(根据索引位置删除)
user_list = ["宝强","羽凡","Alex","乃亮","Alex"]
# 0 1 2 3 4
user_list.pop(1)
print(user_list) # ["宝强","Alex","乃亮","Alex"]
user_list.pop()
print(user_list) # ["宝强","Alex","乃亮"]
# 如果pop()中不传入参数,则默认踢出列表中最后一个元素
item = user_list.pop(1)
print(item) # "Alex"
print(user_list) # ["宝强","乃亮"]
# 注意:remove()不会返回值,所以不能赋值给变量,但pop()可以将值返回给变量
# ["alex","李杰","eric","轩小陌","老妖","钢弹"]
user_queue = []
while True:
name = input("北京~上海火车票,购买请输入姓名排队(Q退出):")
if name == "Q":
break
user_queue.append(name)
# 用户输入姓名后储存到列表user_queue中
ticket_count = 3
for i in range(ticket_count):
username = user_queue.pop(0)
message = "恭喜{},购买火车票成功。".format(username)
print(message)
# 设定剩余票数为3,将user_queue中前3个用户逐一踢出并输出
faild_user = "、".join(user_queue) # "轩小陌、老妖、钢弹"
faild_message = "非常抱歉,票已售完,以下几位用户请选择其他出行方式,名单:{}。".format(faild_user)
print(faild_message)
# 对user_queue中剩余的用户格式化输出,从而实现了排队买火车票的功能
1.2.6 clear()
清空原列表
user_list = ["宝强","羽凡","Alex","乃亮","Alex"]
user_list.clear()
print(user_list) # 输出结果:[]
1.2.7 index()
根据值获取索引(从左到右找到第一个索引)。注意:如果要找的元素在列表中不存在,则会报错。
user_list = ["宝强","羽凡","Alex","乃亮","Alex"]
# 0 1 2 3 4
if "Alex" in user_list:
index = user_list.index("Alex")
print(index)
else:
print("不存在")
# 输出结果:2
1.2.8 sort()
列表元素排序
# 数字排序
num_list = [11, 22, 4, 5, 11, 99, 88]
num_list.sort() # sort()默认从小到大排序
print(num_list)
# 输出结果:[4, 5, 11, 11, 22, 88, 99]
num_list.sort(reverse=True)
# sort()中传入参数reverse=True,则从大到小排序
print(num_list)
# 输出结果:[99, 88, 22, 11, 11, 5, 4]
# 字符串排序
user_list = ["宝强", "Ab羽凡", "Alex", "乃亮", "贾乃", "1"]
# user_list中各元素中每个字符在unicode中的码位为:
["宝","强"] ----------------------[23453, 24378]
["A","b","羽","凡"]---------------[65, 98, 32701, 20961]
["A","l","e","x"]-----------------[65, 108, 101, 120]
["乃","亮"]-----------------------[20035, 20142]
["贾","乃"]-----------------------[36158, 20035]
["1"]-----------------------------[49]
# 通过对比各字符串中第1个字符对应码位的大小,小在前大再后的原则排序。如果第1个字符相同,则比较第2个字符,以此类推
user_list.sort()
print(user_list)
# 输出结果:['1', 'Ab羽凡', 'Alex', '乃亮', '宝强', '贾乃']
注意:排序时内部元素无法进行比较时,程序会报错,所以要保证列表内数据类型一致。
1.2.9 reverse()
反转原列表
user_list = ["宝强","羽凡","Alex","乃亮","Alex"]
user_list.reverse()
print(user_list)
# 输出结果:
['Alex', '乃亮', 'Alex', '羽凡', '宝强']
注意:reverse()翻转是列表独有的功能,字符串的翻转只能通过索引实现。
列表中remove、pop、del删除功能的区别:
- remove一般用于删除列表中指定内容的元素,如:alist . remove(’ alex ')
- pop一般用于删除列表中指定索引位置的元素,如:alist . pop(1)
- del除了可删除列表中指定内容、索引位置元素,还能删除指定索引区间的元素,如:del alist [1:4]
1.3 公共功能
-
相加,两个列表相加获取生成一个新的列表。
v1 = ["赵四","刘能"] v2 = ["宋晓峰","范德彪"] v3 = v1 + v2 print(v3) # 输出结果:["赵四","刘能","宋晓峰","范德彪"]
-
相乘,列表*整型 将列表中的元素再创建N份并生成一个新的列表。
data = ["赵四","刘能"] * 2 print(data) # 输出结果:["赵四","刘能","赵四","刘能"]
-
运算符 in 包含
由于列表内部是由多个元素组成,可以通过 in 来判断元素是否在列表中。user_list = ["狗子","二蛋","沙雕","alex"] result1 = "alex" in user_list result2 = "alex" not in user_list print(result1) print(result1) # 输出结果: True Fales
user_list = ["狗子","二蛋","沙雕","alex"] if "alex" in user_list: print("在,把他删除") user_list.remove("alex") else: print("不在")
text = input("请输入文本内容:") forbidden_list = ["草","欧美","日韩"] for item in forbidden_list: text = text.replace(item,"**") print(text) # 通过for in 循环,实现敏感词替换
注意:列表检查元素是否存在时,是采用逐一比较的方式,效率会比较低。
-
长度
user_list = ["范德彪","刘华强","尼古拉斯赵四"] print( len(user_list) ) # 输出结果:3
-
索引
# 读 user_list = ["范德彪","刘华强","尼古拉斯赵四"] print( user_list[0] ) # "范德彪" print( user_list[2] ) # "尼古拉斯赵四" print( user_list[3] ) # 索引超出列表范围,会报错
# 改 user_list = ["范德彪","刘华强","尼古拉斯赵四"] user_list[0] = "轩小陌" print(user_list) # 输出结果: ["轩小陌","刘华强",'尼古拉斯赵四']
# 删 user_list = ["范德彪","刘华强","尼古拉斯赵四"] del user_list[1] user_list.remove("刘华强") ele = user_list.pop(1)
注意:
- 超出索引范围会报错。
- 由于字符串是不可变类型,所以他只有索引读的功能,而列表可以进行读、改、删。
-
切片
# 读 user_list = ["范德彪","刘华强","尼古拉斯赵四"] print( user_list[0:2] ) print( user_list[1:] ) print( user_list[:-1] ) # 输出结果: ["范德彪","刘华强"] ["刘华强","尼古拉斯赵四"] ["范德彪","刘华强"]
# 改 user_list = ["范德彪", "刘华强", "尼古拉斯赵四"] user_list[0:2] = [11, 22, 33, 44] print(user_list) # 输出结果:[11, 22, 33, 44, '尼古拉斯赵四'] user_list = ["范德彪", "刘华强", "尼古拉斯赵四"] user_list[2:] = [11, 22, 33, 44] print(user_list) # 输出结果:['范德彪', '刘华强', 11, 22, 33, 44] user_list = ["范德彪", "刘华强", "尼古拉斯赵四"] user_list[10000:] = [11, 22, 33, 44] # 索引大于列表范围进行切片,会默认加到最后 print(user_list) # 输出结果:['范德彪', '刘华强', "尼古拉斯赵四", 11, 22, 33, 44] user_list = ["范德彪", "刘华强", "尼古拉斯赵四"] user_list[-10000:1] = [11, 22, 33, 44] # 索引开始值为负数,相当于从0开始 print(user_list) # 输出结果:[11, 22, 33, 44, "刘华强", "尼古拉斯赵四"]
# 删 user_list = ["范德彪", "刘华强", '尼古拉斯赵四'] del user_list[1:] print(user_list) # 输出结果:["范德彪"]
-
步长
user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"] print( user_list[1:4:2] ) print( user_list[0::2] ) print( user_list[1::2] ) print( user_list[4:1:-1] ) # 输出结果: ['刘华强', '宋小宝'] ['范德彪', '尼古拉斯赵四', '刘能'] ['刘华强', '宋小宝'] ['刘能', '宋小宝', '尼古拉斯赵四']
-
for循环
user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"] for item in user_list: print(item)
user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"] for index in range( len(user_list) ): item = user_index[index] print(item)
注意:如需要循环的过程中对数据进行删除,正确的方式是从后往前循环。
# 错误方式: user_list = ["刘的话", "范德彪", "刘华强", '刘尼古拉斯赵四', "宋小宝", "刘能"] for item in user_list: if item.startswith("刘"): user_list.remove(item) print(user_list) # 输出结果: ['范德彪', '刘尼古拉斯赵四', '宋小宝']
# 正确方式: user_list = ["刘的话", "范德彪", "刘华强", '刘尼古拉斯赵四', "宋小宝", "刘能"] for index in range(len(user_list) - 1, -1, -1): item = user_list[index] if item.startswith("刘"): user_list.remove(item) print(user_list) # 输出结果: ['范德彪', '宋小宝']
1.4 转换
-
int 、bool 无法转换成列表
-
str 可转换成列表(不常用)
name = "轩小陌" data = list(name) print(data) # 输出结果:["轩","小","陌"]
-
元组、集合可转换成列表(比较常用)
# 元组转列表 v1 = ( 11, 22, 33, 44 ) vv1 = list(v1) print(vv1) # 输出结果:[ 11, 22, 33, 44 ] # 集合转列表 v2 = {"alex","eric","dsb"} vv2 = list(v2) print(vv2) # 输出结果:["alex","eric","dsb"]
1.5. 其他
嵌套:列表属于容器,内部可以存放各种数据,所以他也支持列表的嵌套,如:
data = [ "谢广坤", ["海燕","赵本山"], True, [11, 22, [999,123], 33, 44], "宋小宝" ]
对于嵌套的列表,同样可以通过索引获取其中的元素,例如:
data = [ "谢广坤",["海燕","赵本山"],True,[11,22,33,44],"宋小宝" ]
print( data[0] ) # "谢广坤"
print( data[1] ) # ["海燕","赵本山"]
print( data[0][2] ) # "坤"
print( data[1][-1] ) # "赵本山"
data.append(666)
print(data)
# 输出结果:[ "谢广坤",["海燕","赵本山"],True,[11,22,33,44],"宋小宝",666]
data[1].append("谢大脚")
print(data)
# 输出结果:[ "谢广坤",["海燕","赵本山","谢大脚"],True,[11,22,33,44],"宋小宝",666 ]
del data[-2]
print(data)
# 输出结果:[ "谢广坤",["海燕","赵本山","谢大脚"],True,[11,22,33,44],666 ]
data[-2][1] = "alex"
print(data)
# 输出结果:[ "谢广坤",["海燕","赵本山","谢大脚"],True,[11,"alex",33,44],666 ]
data[1][0:2] = [999,666]
print(data)
# 输出结果:[ "谢广坤",[999,666,"谢大脚"],True,[11,"alex",33,44],666 ]
# 通过while循环创建用户列表,用户列表形如:[["user1","pwd1"],["user2","pwd2"],...]
user_list = []
while True:
user = input("请输入用户名(Q退出):") # "alex"、"eric"
if user == "Q":
break
pwd = input("请输入密码:") # "123"、"666"
data = [user, pwd]
user_list.append(data)
print(user_list)
# 输出结果:
[["alex","123"],["eric","666"]]
1.6 列表作业
-
写代码,有如下列表,按照要求实现每一个功能。
li = ["alex", "WuSir", "ritian", "barry", "轩小陌"]
-
计算列表的长度并输出
print(len(li))
-
列表中追加元素"seven",并输出添加后的列表
print(li.append('seven'))
-
请在列表的第1个索引位置插入元素"Tony",并输出添加后的列表
print(li.insert(1,'Tony'))
-
请修改列表第2个索引位置的元素为"Kelly",并输出修改后的列表
li[2] = 'Kelly' print(li)
-
请将列表的第3个位置的值改成 “妖怪”,并输出修改后的列表
li[3] = '妖怪' print(li)
-
请将列表
data=[1,"a",3,4,"heart"]
的每一个元素追加到列表li
中,并输出添加后的列表print(li.extend(data))
-
请将字符串
s = "qwert"
的每一个元素到列表li
中。li.extend(s)
-
请删除列表中的元素"barry",并输出添加后的列表
li.remove('barry') print(li)
-
请删除列表中的第2个元素,并输出删除元素后的列表
li.pop(1) print(li)
-
请删除列表中的第2至第4个元素,并输出删除元素后的列表
del li[1:4] print(li)
-
-
写代码,有如下列表,利用切片实现每一个功能
li = [1, 3, 2, "a", 4, "b", 5,"c"]
-
通过对li列表的切片形成新的列表 [1,3,2]
li = li[:3]
-
通过对li列表的切片形成新的列表 [“a”,4,“b”]
li = li[3:6]
-
通过对li列表的切片形成新的列表 [1,2,4,5]
li = li[::2]
-
通过对li列表的切片形成新的列表 [3,“a”,“b”]
li = li[1:-1:2]
-
通过对li列表的切片形成新的列表 [3,“a”,“b”,“c”]
li = li[1::2]
-
通过对li列表的切片形成新的列表 [“c”]
li = li[-1]
-
通过对li列表的切片形成新的列表 [“b”,“a”,3]
li = li[5::-2]
-
-
写代码,有如下列表,按照要求实现每一个功能。
lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
-
将列表lis中的第2个索引位置的值变成大写,并打印列表
lis[2] = lis[2].upper() print(lis)
-
将列表中的数字3变成字符串"100"
lis[1] = '100' lis[3][2][1][1] = '100' print(lis)
-
将列表中的字符串"tt"变成数字 101
lis[3][2][1][0] = 101 print(lis)
-
在 "qwe"前面插入字符串:“火车头”
lis[3].insert(0,"火车头")
-
-
请用代码实现循环输出元素和值:users = [“轩小陌”,“景女神”,“肖大侠”] ,如:
0 轩小陌 1 景女神 2 肖大侠 # 请补充代码 users = ["轩小陌","景女神","肖大侠"] for index in range(len(users)): print(index, users[i])
-
请用代码实现循环输出元素和值:users = [“轩小陌”,“景女神”,“肖大侠”] ,如:
1 轩小陌 2 景女神 3 肖大侠 # 请补充代码: users = ["轩小陌","景女神","肖大侠"] for index in range(len(users)): print(index+1, users[index])
-
写代码实现以下功能
-
如有变量 goods = [‘汽车’,‘飞机’,‘火箭’] 提示用户可供选择的商品:
0,汽车 1,飞机 2,火箭 # 请补充代码: goods = ['汽车','飞机','火箭'] print("可供选择的商品:) for index in range(len(goods)): print(index, goods[index])
-
用户输入索引后,将指定商品的内容拼接打印,如:用户输入0,则打印 您选择的商品是汽车。
index = input("请输入商品编号:") print("您选择的商品是:{}".format(goods[int(index)]))
-
-
利用for循环和range 找出 0 ~ 50 以内能被3整除的数,并追加到一个列表。
lis = [] for i in range(51): if i % 3 == 0: lis.append(i) print(lis)
-
利用for循环和range 找出 0 ~ 50 以内能被3整除的数,并插入到列表的第0个索引位置,最终结果如下:[48,45,42…]
lis = [] for i in range(51): if i % 3 == 0: lis.insert(0,i) print(lis)
-
查找列表li中的元素,移除每个元素的空格,并找出以"a"开头,并添加到一个新列表中,最后循环打印这个新列表。
li = ["alexC", "AbC ", "egon", " riTiAn", "XuanSir", " aqc"] # 请补充代码: new_li = [] for item in li: item = item.strip() if item.startswith('a'): new_li.append(item) print(new_li)
-
将以下车牌中所有
京
的车牌搞到一个列表中,并输出京牌车辆的数量。data = ["京1231", "冀8899", "京166631", "晋989"] # 请补充代码: jing_data = [] count = 0 for item in data: if '京' in item: jing_data.append(item) count += 1 print(jing_data) print(count)
2.元组
列表(list),是一个有序且可变的容器,在里面可以存放多个不同类型的元素。
元组(tuple),是一个有序且不可变的容器,在里面可以存放多个不同类型的元素。
如何体现不可变呢?
元组中的元素不可修改,但元组可以增加元素
2.1 定义
v1 = (11,22,33)
v2 = ("李杰","Alex")
v3 = (True,123,"Alex",[11,22,33,44])
# 建议:在元组的最后多加一个',' 如:
v2 = ("李杰","Alex",)
d1 = (1) # 1
d2 = (1,) # (1,)
d3 = (1,2)
d4 = (1,2)
注意:建议在元组的最后多加一个 " , ",用于标识它是一个元组。原因:如果元组中仅有一个整型元素,不加 " , " 的话,python解释器会默认为一个整型处理:
比较 v1 = (1) 和 v2 = 1 和 v3 = (1,) 有什么区别? # v1 = v2 = 1 , v3才是元组
比较 v1 = ( (1),(2),(3) ) 和 v2 = ( (1,) , (2,) , (3,),) 有什么区别? # v1 = (1,2,3)
2.2 独有功能
无
2.3 公共功能
-
相加,两个列表相加获取生成一个新的列表。
data = ("赵四","刘能") + ("宋晓峰","范德彪") print(data) # 输出结果:("赵四","刘能","宋晓峰","范德彪")
-
相乘,列表*整型 将列表中的元素再创建N份并生成一个新的列表。
data = ("赵四","刘能") * 2 print(data) # 输出结果:("赵四","刘能","赵四","刘能")
-
获取长度
user_list = ("范德彪","刘华强",'尼古拉斯赵四',) print( len(user_list) ) # 输出结果:3
-
索引
user_list = ("范德彪","刘华强",'尼古拉斯赵四',) print( user_list[0] ) print( user_list[2] ) print( user_list[3] ) # 输出结果: "范德彪" '尼古拉斯赵四' 报错
-
切片
user_list = ("范德彪","刘华强",'尼古拉斯赵四',) print( user_list[0:2] ) print( user_list[1:] ) print( user_list[:-1] ) # 输出结果: ('范德彪', '刘华强',) ('刘华强', '尼古拉斯赵四',) ('范德彪', '刘华强',)
-
步长
user_list = ("范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能") print( user_list[1:4:2] ) print( user_list[0::2] ) print( user_list[1::2] ) print( user_list[4:1:-1] ) # 输出结果: ('刘华强', '宋小宝',) ('范德彪', '尼古拉斯赵四', '刘能',) ('刘华强', '宋小宝',) ('刘能', '宋小宝', '尼古拉斯赵四',)
# 注意:字符串和元组由于其不可变的属性,所以是不能像列表一样使用reverse()进行翻转的,只能通过索引加步长或者循环的方式实现翻转,并生成新的字符串和元组 user_tuple = ("范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能") data = user_tuple[::-1] user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"] user_list.reverse() print(user_tuple) print(data) print(user_list) # 输出结果: ('范德彪', '刘华强', '尼古拉斯赵四', '宋小宝', '刘能',) ('刘能', '宋小宝', '尼古拉斯赵四', '刘华强', '范德彪',) ['刘能', '宋小宝', '尼古拉斯赵四', '刘华强', '范德彪']
-
for循环
user_list = ("范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能",) for item in user_list: print(item)
目前:只有 str、list、tuple 可以被for循环。 “xxx” [11,22,33] (111,22,33)
user_list = ("范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能") for index in range(len(user_list)): item = user_list[index] print(item)
2.4 转换
其他类型转换为元组,使用tuple(其他类型)
,目前只有字符串和列表可以转换为元组。
data = tuple(其他)
name = "轩小陌"
data = tuple(name)
print(data)
# 输出结果:("轩","小","陌")
name = ["轩小陌",18,"python"]
data = tuple(name)
print(data)
# 输出结果:("轩小陌",18,"python")
2.5 其他
嵌套:由于元组和列表都可以充当容器
,他们内部可以放很多元素,并且也支持元素内的各种嵌套。
tu = ( '今天小明不在家', '红红和芳芳聊天', ('大虎问小王今年几岁','爸爸每天辛苦地赚钱'), )
tu1 = tu[0]
tu2 = tu[1]
tu3 = tu[2][0]
tu4 = tu[2][1]
tu5 = tu[2][1][3]
print(tu1)
print(tu2)
print(tu3)
print(tu4)
print(tu5)
# 输出结果:
今天小明不在家
红红和芳芳聊天
大虎问小王今年几岁
爸爸每天辛苦地赚钱
小
练习题1:
li = ["alex", [11,22,(88,99,100,),33], "XuanSir", ("ritian", "barry",), "wenzhou"]
# 索引: 0 1 2 3 4
# 1.请将 "XuanSir" 修改成 "轩小陌"
li[2] = "轩小陌"
# 2.请将 ("ritian", "barry",) 修改为 ['天','地']
li[3] = ['天','地']
# 3.请将 88 修改为 87
88在元组中,无法修改
# 4.请将 "wenzhou" 删除,然后再在列表第0个索引位置插入 "周周"
li.remove("wenzhou")
li.insert(0,"周周")
练习题2:
data = ("123", 666, [11, 22, 33], ("alex", "李杰", [999, 666, (5, 6, 7)]), )
# 1.将 “123” 替换成 9
"123"在元组中,无法修改
# 2.将 [11,22,33] 换成 "轩小陌"
[11,22,33]在元组中,无法修改
# 3.将 11 换成 99
data[2][0] = 99
# 4.在列表 [11,22,33] 追加一个44
data[2].append(44)
练习题3:
# 动态的创建用户并添加到用户列表中
user_list = []
while True:
user = input("请输入用户名:") # "alex"、"admin"、"eric"
if user == "Q":
break
pwd = input("请输入密码:") # "132"、"123"、"123"
item = (user,pwd,)
user_list.append(item)
print(user_list)
# 输出结果:[ ("alex","132"),("admin","123"),("eric","123") ]
# 实现:用户登录案例
print("登录程序")
username = input("请输入用户名:")
password = input("请输入密码:")
is_success = False
for item in user_list:
if username == item[0] and password == item[1]:
is_success = True
break
if is_success:
print("登录成功")
else:
print("登录失败")
今日总结
- 概述
- 列表,以后写程序会用的非常多,要多写多练。
- 元组,以后写程序用的不是很多,主要以了解其特殊属性为主。
- 列表和元组的区别。
- 可变类型和不可变类型。
- 列表独有功能 & 公共功能(不用死记硬背,多加练习,熟能生巧)。
- 列表和元组等数据的嵌套。
- 元组中 (1) 和 (1,) 的区别。
- 元组的元素不能被替换,但元组的元素如果是可变类型,可变类型内部是可以修改的。
今日作业
-
以下哪些数据类型转换为布尔值为False
1 # True "" # False -19 # True [] # False [11,22] # True (1) # True (1,2,3) # True () # False
-
运算符操作
v1 = [] or "alex" # "alex" v2 = [11,22] and (1,2,) # (1,2,)
-
比较:
a = [1,2,3]
和b = [(1),(2),(3) ]
以及c = [(1,),(2,),(3,) ]
的区别?a = [1,2,3] # 是一个列表,列表中的每个元素都是整型 b = [(1),(2),(3)] = [1,2,3] # 是一个跟a一样的列表 c = [(1,),(2,),(3,)] # 是一个列表,列表中的每个元素都是一个元组
-
将字符串
text = "xuanxiaomo|alex|eric"
根据|
分割为列表,然后列表转换为元组类型。text_list = text.split('|') text_tuple = tuple(text_list)
-
根据如下规则创建一副扑克牌(排除大小王)。
# 花色列表 color_list = ["红桃","黑桃","方片","梅花"] # 牌值 num_list = [] for num in range(1,14): num_list.append(num) result = [] # 请根据以上的花色和牌值创建一副扑克牌(排除大小王) # 最终result的结果格式为: [ ("红桃",1), ("红桃",2) ... ] # 请补充代码: for color in color_list: for num in num_list: card = (color,num,) result.append(card) print(result)