14.列表(list)
定义:有序且可变的容器
user_list=[1,True,"希岛爱理"]
data_list=[] data_list.append["波多野结衣"] data_list.append["桥本有菜"] print(data_list) # ["波多野结衣",桥本有菜"]
14.1列表独有功能
1.append[]
内容可变 追加
data_list=[] data_list.append["波多野结衣"] data_list.append["桥本有菜"] print(data_list) # ["波多野结衣",桥本有菜"]
2.extend([ ])
批量追加
data_list = [] data_list.append("波多野结衣") data_list.extend(["桥本有菜", "大桥未久"]) # 批量追加 print(data_list) # ["波多野结衣","桥本有菜","大桥未久"]
3.insert()
指定索引位置插入值
data_list = ["波多野结衣", "桥本有菜", "大桥未久"] data_list.insert(0, "dxl") #0位置插入dxl print(data_list)
案例
user_name = [] while True: tips = input("请输入您的姓名:,按Q/q可退出操作") if tips.upper() == "Q": break if tips == "杜": user_name.insert(0, tips) else: user_name.append(tips) print(user_name)
4.remove()
删除原列表中的某一个值,若该值不存在会报错 则应该做判断再删除
data_list = ["dxl", "ygj", "csy"] if "dxl" in data_list: data_list.remove("dxl") print(data_list)
也可删除全部要删除的内容
data_list = ["dxl", "ygj", "csy", "dxl"] while True: if "dxl" in data_list: data_list.remove("dxl") else: break print(data_list)
案例
# 自动抽奖 import random value_list = ["二手充气女友", "iphone15pm", "洗浴年卡", "大宝剑"] while value_list: name = input("请输入您的姓名:") value = random.choice(value_list) print(f"恭喜{name}抽中{value}") value_list.remove(value)
5.pop()
根据索引删除
value_list = ["二手充气女友", "iphone15pm", "洗浴年卡", "大宝剑"] value_list.pop(0) # 删除第0个位置对应的内容 value_list.pop() # 不加索引默认删除最后一个 value=value_list.pop(0) # 获取删除值并赋值给value
案例
# 排队买火车票 user_name = [] while True: name = input("请输入你的名字(Q/q)退出:") if name.upper() == "Q": break else: user_name.append(name) ticket_count = 3 # 0 1 2 for i in range(ticket_count): username = user_name.pop(0) print(f"恭喜{username}已经买到车票") faild_user = ",".join(user_name) print(f"非常抱歉,票已售完,以下用户没有购买成功{faild_user}")
6.clear()
清空列表
value_list = ["二手充气女友", "iphone15pm", "洗浴年卡", "大宝剑"] value_list.clear() print(value_list)
7.index()
根据值获取索引【找不到会报错,慎用】
value_list = ["二手充气女友", "iphone15pm", "洗浴年卡", "大宝剑"] if "大宝剑" in value_list: index = value_list.index("大宝剑") print(index) else: print("未找到删除目标")
8.sort()
对列表排序
# 数字排序 num_list = [99, 23, 42, 12, 53, 14, 12] print(num_list) num_list.sort() # num_list.sort(reverse=True) 从大到小 print(num_list) # 默认从小到大
sort排序原理
字符串会转换成unicode的编码比较后再排序
注意:又有数字又有字符串的时候会报错,没办法进行比较
9.reverse
反转原列表(调个顺序)
value_list = ["二手充气女友", "iphone15pm", "洗浴年卡", "大宝剑"] value_list.reverse() print(value_list)
14.2列表公共功能
1.相加
value_list = ["二手充气女友", "iphone15pm", "洗浴年卡", "大宝剑"] data_list = ["波多野结衣", "桥本有菜", "大桥未久"] v1=value_list+data_list print(v1) # ['二手充气女友', 'iphone15pm', '洗浴年卡', '大宝剑', '波多野结衣', '桥本有菜', '大桥未久']
2.相乘
data_list = ["波多野结衣", "桥本有菜", "大桥未久"] * 2 print(data_list) # ['波多野结衣', '桥本有菜', '大桥未久', '波多野结衣', '桥本有菜', '大桥未久']
3.运算符in包含
data_list = ["波多野结衣", "桥本有菜", "大桥未久"] if "大桥未久" in data_list: print("可以删除") data_list.remove("大桥未久") else: print("目标不在") print(data_list)
4.获取长度
data_list = ["波多野结衣", "桥本有菜", "大桥未久"] print(len(data_list))
5.索引
针对一个元素
# 读 user_list = ["范德彪","刘华强",'尼古拉斯赵四'] print( user_list[0] ) print( user_list[2] ) print( user_list[3] ) # 报错
# 改 user_list = ["范德彪","刘华强",'尼古拉斯赵四'] user_list[0] = "123" print(user_list) # ["123","刘华强",'尼古拉斯赵四']
# 删 user_list = ["范德彪","刘华强",'尼古拉斯赵四'] del user_list[1] user_list.remove("刘华强") ele = user_list.pop(1) # 此时ele尼古拉斯赵四
注意:超出索引范围会报错。 提示:由于字符串是不可变类型,所以他只有索引读的功能,而列表可以进行 读、改、删
6.切片
多个元素的操作(很少用)
# 读 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[3:] = [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] print(user_list) # 输出 [11, 22, 33, 44, '刘华强', '尼古拉斯赵四']
# 删 user_list = ["范德彪", "刘华强", '尼古拉斯赵四'] del user_list[1:] print(user_list) # 输出 ['范德彪']
7.步长
user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"] # 0 1 2 3 4 print( user_list[1:4:2] ) print( user_list[0::2] ) print( user_list[1::2] ) print( user_list[4:1:-1] )
# 案例:实现列表的翻转 user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"] new_data = user_list[::-1] print(new_data) data_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"] data_list.reverse() print(data_list) # 给你一个字符串请实现字符串的翻转? name = "dxl" name[::-1]
8.for循环
user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"] for item in user_list: print(item)
user_list = ["范德彪", "刘华强", "尼古拉斯赵四", "宋小宝", "刘能"] for index in range(len(user_list)): item = user_list[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)
例如,如果 user_list = [10, 20, 30, 40, 50]
,那么这个循环会从索引 4
(对应元素 50
)开始,然后是索引 3
(对应元素 40
),以此类推,直到索引 0
(对应元素 10
)。
9.list()
类型转换
-
int、bool无法转换成列表
-
str
name = "lotus" data = list(name) # ["l","o","t","u","s"] print(data)
-
超前
v1 = (11,22,33,44) # 元组 vv1 = list(v1) # 列表 [11,22,33,44] v2 = {"lianhua","eric","dsb"} # 集合 vv2 = list(v2) # 列表 ["lianhua","eric","dsb"]
10.嵌套
列表属于容器,内部可以存放各种数据,所以他也支持列表的嵌套,如:
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] = "dxl" print(data) # [ "谢广坤",["海燕","赵本山","谢大脚"],True,[11,"dxl",33,44],666 ] data[1][0:2] = [999,666] print(data) # [ "谢广坤",[999,666,"谢大脚"],True,[11,"dxl",33,44],666 ]
# 创建用户列表 # 用户列表应该长: [ ["dxl","123"],["eric","666"] ] # user_list = [["dxl","123"],["eric","666"],] # user_list.append(["dxl","123"]) # user_list.append(["eric","666"]) user_list = [] while True: user = input("请输入用户名:") pwd = input("请输入密码:") data = [] data.append(user) data.append(pwd) user_list.append(data)
user_list = [] while True: user = input("请输入用户名(Q退出):") if user == "Q": break pwd = input("请输入密码:") data = [user,pwd] user_list.append(data) print(user_list)
练习题
-
写代码,有如下列表,按照要求实现每一个功能。
li = ["lianhua", "WuSir", "ritian", "barry", "lotus"]
-
计算列表的长度并输出
print(len(li))
-
列表中追加元素"seven",并输出添加后的列表
li.append("seven") print(li)
-
请在列表的第1个索引位置插入元素"Tony",并输出添加后的列表
-
li.insert(1, "Tony") print(li)
-
请修改列表第2个索引位置的元素为"Kelly",并输出修改后的列表
-
li.pop(2) li.insert(2, "Kelly") print(li)
-
请将列表的第3个位置的值改成 "妖怪",并输出修改后的列表
-
li.pop(2) li.insert(2, "妖怪") print(li)
-
请将列表
data=[1,"a",3,4,"heart"]
的每一个元素追加到列表li
中,并输出添加后的列表 -
data = [1, "a", 3, 4, "heart"] for i in data: li.append(i) print(li)
-
请将字符串
s = "qwert"
的每一个元素到列表li
中。 -
s = "qwert" for i in s: li.append(i) print(li)
-
请删除列表中的元素"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]
-
print(li[0:3])
-
通过对li列表的切片形成新的列表 ["a",4,"b"]
-
print(li[3:6])
-
通过对li列表的切片形成新的列表 [1,2,4,5]
-
print(li[0:8:2])
-
通过对li列表的切片形成新的列表 [3,"a","b"]
-
print(li[1:6:2])
-
通过对li列表的切片形成新的列表 [3,"a","b","c"]
-
print(li[1:8:2])
-
通过对li列表的切片形成新的列表 ["c"]
-
print(li[7:])
-
通过对li列表的切片形成新的列表 ["b","a",3]
-
print(li[-3:-8:-2])
-
-
写代码,有如下列表,按照要求实现每一个功能。
lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
-
将列表lis中的第2个索引位置的值变成大写,并打印列表。
-
lis[2:3] = "K" print(lis)
-
将列表中的数字3变成字符串"100"
-
lis[1:2] = "100" print(lis)
-
将列表中的字符串"tt"变成数字 101
-
lis[3][2][1][0] = 101 print(lis)
-
在 "qwe"前面插入字符串:"火车头"
-
lis[3][0] = "火车头" + lis[3][0] print(lis)
-
-
请用代码实现循环输出元素和值:users = ["lotus、","景女神","肖大侠"] ,如:
0 lotus 1 景女神 2 肖大侠
答案:
count = 0 for i in users: print(f"{count} {i}") count += 1
-
请用代码实现循环输出元素和值:users = ["lotus","景女神","肖大侠"] ,如:
1 lotus 2 景女神 3 肖大侠
答案:
count = 1 for i in users: if count < 4: print(f"{count} {i}") count += 1
-
写代码实现以下功能
-
如有变量 goods = ['汽车','飞机','火箭'] 提示用户可供选择的商品:
0,汽车 1,飞机 2,火箭
-
用户输入索引后,将指定商品的内容拼接打印,如:用户输入0,则打印 您选择的商品是汽车。
-
goods = ["汽车", "飞机", "火箭"] choice = input("汽车,飞机,火箭可供您选择 请按照0-2的序号选择您喜欢的货物:") xuanze = int(choice) if xuanze == 0: print(f"您选择的货物是{goods[0]}") elif xuanze == 1: print(f"您选择的货物是{goods[1]}") else: print(f"您选择的货物是{goods[2]}")
-
-
利用for循环和range 找出 0 ~ 50 以内能被3整除的数,并追加到一个列表。
num_list = [] for i in range(0, 51): if i % 3 == 0: num_list.append(i) else: continue print(num_list)
-
利用for循环和range 找出 0 ~ 50 以内能被3整除的数,并插入到列表的第0个索引位置,最终结果如下:
[48,45,42...]
num_list = [] for i in range(0, 51): if i % 3 == 0: num_list.insert(0, i) else: continue print(num_list)
-
查找列表li中的元素,移除每个元素的空格,并找出以"a"开头,并添加到一个新列表中,最后循环打印这个新列表。
li = ["lianhuaC", "AbC ", "egon", " riTiAn", "WuSir", " aqc"]
new_li = [] for element in li: element = element.strip() # 移除元素的空格 if element.startswith("a"): # 判断是否以 'a' 开头 new_li.append(element) for item in new_li: print(item)
-
将以下车牌中所有
京
的车牌搞到一个列表中,并输出京牌车辆的数量。data = ["京1231", "冀8899", "京166631", "晋989"]
data = ["京1231", "冀8899", "京166631", "晋989"] car = [] count = 0 for i in data: if i.startswith("京"): car.append(i) count += 1 print(f"京牌车的数量是{count}")