列表
用于存储大量元素时候使用列表
列表(list()):
相当于一个有序的集合. 顺序(从0开始排序)
就是一个容器, 相当于一个箱子(各种物品), 列表中放数据(整数, 小数, 字符串, 布尔值, None, 列表, 元组, 字典等等). 其中每个数据用 , 隔开.
列表特点:
1.有序, 有索引: 第一个位置索引是0, 列表顺序(索引) 从0开始, 向后依次递增,每次加一, 0, 1, 2, 3… 作用是标记列表数据的位置.python会默认从0开始给每一个元素(数据)一个索引,
我们对列表进行增删改查, 就是可以通过索引进行, 记住<索引是唯一的,不重复> 千万记住列表索引从0开始.
2.列表中元素可以重复出现. 但是不同位置的元素索引不一样.索引具有唯一性.
3.列表中元素的索引都是有正, 负两个索引, 但是0只有一个.
- 创建空列表
list1 = list() # 使用list()函数创建
list2 = [] # 推荐使用, 简单快捷
- 创建带元素的列表
list1 = ['盾山', '张飞', '鬼谷子', '蔡文姬']
list2 = ['武则天', 9988, 10086.11, True, False]
- 多维列表
# 列表中放列表, 叫多维列表
# 二维列表
two_list = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
print(two_list)
# 三维列表
three_list = [[[1, 2], [1, 2]], [[1, 2], [1, 2]]]
print(three_list)
- 打印单个元素
list1 = ['裴擒虎', '瑶', '云中君']
print(list1[0]) # 打印第一个元素, 列表索引从0开始排
print(list1[1]) # 打印第二个元素
- 查询元素是否存在
list1 = ['李宁', '耐克', '阿达迪斯']
res = '李宁' in list1
print(res)
- 循环打印列表
list1 = ['李宁', '耐克', '阿达迪斯']
for l in list1:
print(l)
- 遍历列表获取列表索引及元素
list1 = ['李宁', '耐克', '阿达迪斯']
for i, l in emumerate(list1):
print(i, l)
- 列表元素修改
# 索引(下标), 列表默认给元素进行一个排序, 从0开始,依次增大
list1 = ["嘉靖", "李隆基", "刘彘", "朱棣"]
print(list1[2])
list1[2] = "汉武帝"
print(list1)
list1[1] = "唐明皇"
print(list1)
- 列表常用函数
- 添加函数: append()/insert()
# 1.append()函数: list2.append(数据) 括号中写要添加到列表的数据,将对象追加到列表的末尾。(Append object to the end of the list.)默认添加到列表的尾部.
list2.append("15136282191")
print(list2)
list2.append(100000000)
print(list2)
# 2.insert()函数, 插入数据, 括号中第一个参数填位置, 第二个参数填要插入的数据.
# 0 1 2 3 4
list3 = ["李白", "韩信", "曹操", "刘备", "赵云"]
# 0 1(孙悟空) 2(韩信) 3(曹操) .....
print(list3)
list3.insert(1, "孙悟空")
print(list3)
list3.insert(2, "俺老孙也是风一般的男子!")
print(list3)
print("---------------------------------")
- 查询函数: count()/index()
list2 = ["鲁班七号", "后羿", "公孙离", "马可波罗", "黄忠", "后羿", "公孙离", "马可波罗", "后羿", "公孙离", "马可波罗", "后羿", "公孙离", "马可波罗", "后羿", "公孙离"]
# 1.count(元素): 计算列表中一个元素出现了多少次, 括号中填写要统计的元素本身. 有返回值, 需要一个变量去接收.
count = list2.count("后羿")
print(count)
count = list2.count("马可波罗")
print(count)
# 2.index(元素): 返回元素的索引, 括号里面填元素, 如果列表中有多个相同的元素,则默认返回第一个元素的索引.
list3 = ["马可波罗", "黄忠", "后羿", "公孙离"]
index = list3.index("黄忠")
print(index)
index = list3.index("后羿")
print(index)
index = list3.index("韩信")
# ValueError(值错误): '韩信' is not in list
- reverse()/sort()
# 3.reverse(): 翻转列表, 反转. 直接修改了原来的列表.
print(list3)
list3.reverse()
print(list3)
# 4.sort(): ASCII码 A 65(十进制), Z 90, a 97, z 122, utf-8. 对列表中的元素按照ascii码排序, 默认是升序排序. 括号中可以设置reverse=True, 从大到小排列.
list4 = [2, 3, 5, 1, 8, 23, 12]
print(list4)
list4.sort()
print(list4)
list5 = ["a", "b", "D", "G", "l", "e", "中国"]
list5.sort(reverse=True)
print(list5)
- 列表删除元素: remove()/pop()/ del
# 1.remove()函数, 将列表中某个元素删除, 括号中填入要删除的元素. 在列表中存在多个相同元素时, 使用remove(数据名) 默认删除第一个.
list3.remove("李白")
print(list3)
# 添加一个孙悟空, ['孙悟空', '俺老孙也是风一般的男子!', '韩信', '曹操', '刘备', '赵云', '孙悟空'] , 列表中有两个孙悟空.
list3.append("孙悟空")
print(list3)
# 下边删除 "孙悟空"
list3.remove("孙悟空")
print(list3)
# 2.pop()函数, 针对list中所有的元素, 默认删除最后一个数据. 括号内参数填数据索引, 针对指定索引的数据进行删除.
list3.pop()
print(list3)
# 删除指定索引的数据.
list3.pop(1)
print(list3)
# 3.del 关键字(if elif else, for, while, and, or, break, None.... )
# del list3[指定索引] :删除指定元素,
del list3[0]
print(list3)
- 列表合并: extend()
# 5.extend(): 合并列表, 将一个列表合并另一个列表中, 列表中所有元素插入到另一个列表后边.
list3.extend(list4)
print(list3)
# list + list 起到两个列表拼接的作用, 将后者列表拼接到前者列表
print("你好" + "梦奇!")
list6 = list4 + list3
print(list6)
# list*数字 让列表中元素翻倍
print("你好" * 10)
list7 = [1, 2, 3]
print(list7 * 3)
- 列表查询
# 根据列表中的索引进行数据查询
list4 = ["刘墉", "纳兰性德", "赵匡胤", "晏殊", "李清照", "张良", "海瑞"]
print(list4[3])
print(list4[5])
# 切片查询, list名[开始下标:结束下标] range(开始值, 结束值)取头部取尾
print(list4[2:3])
print(list4[5:6])
print(list4[2:5]) # 取索引为 2, 3, 4 的元素
# 查询出所有元素, [开始值:结束值] 默认开始值是0, 结束值是最后一个位置
"""
len() 函数, 返回列表, 字符串的长度.
"""
# print(len("ssdjhgocvbtjhihreiohgoingi31onfdiog548498165156"))
end = len(list4)
print(end)
print(list4[:end]) # 返回列表的所有元素
print(list4[2:]) # 将列表截取了一段
print(list4[:5])
print(list4[:]) # 默认截取整个列表
# [开始值(默认0):结束值(默认最大):步数(没几个取一个,默认为1)]
print(list4[:5:2])
# 倒序查询, 从最后一个开始查为 -1 接着 -2, -3, -4 ... (0没有正负之分, 所以倒着数不从0开始.)
print(list4[-1]) # 查询倒数第一个 跟list4[8]相同
print(list4[-3]) # 查询倒数第三个
print(list4[-7])
print("------------------------------")
# 循环查询
list5 = ["袁崇焕", "张居正", "霍光", "萧何"]
for l in list5:
print(l)
# 可以用占位符拼接字符串
print("列表输出: %s" % list5)
print("{} list".format(list5))
for l in range(0, len(list5)):
print(f"列表的索引: {l}, 对应的值: {list5[l]}")
# 枚举函数查询, index(索引), value(值) enumerate(枚举) 括号中放入list
for index, value in enumerate(list5):
print(f"{index}-{value}")
for i in range(100):
print(i)
- 列表常用函数
# extend(): 合并列表, 将一个列表合并另一个列表中, 列表中所有元素插入到另一个列表后边.
list3.extend(list4)
print(list3)
# list + list 起到两个列表拼接的作用, 将后者列表拼接到前者列表
print("你好" + "梦奇!")
list6 = list4 + list3
print(list6)
# list*数字 让列表中元素翻倍
print("你好" * 10)
list7 = [1, 2, 3]
print(list7 * 3)
# copy(): list8 = list3 赋值, 数值上相等, list8 = list3.copy() 在内存上相同.
list8 = list3.copy()
print(list8)
# clear(): 清空列表.
list8.clear()
print(list8)
- 列表推导式
# 基本方法
l1 = [x for x in range(10)]
# 带判断的列表推导式
l2 = [x for x in range(10) if x % 2 == 0]
# 双循环
l3 = [(x, y) for x in range(10) for y in range(5)]
# 三个for循环
l4 = [(x, y, z) for x in range(10) for y in range(10) for z in range(10)]
print(l4)
- 列表案例
- 列表去重
name_list = ["诸葛亮", "司马懿", "王昭君", "钟馗", "司马懿", "王昭君"]
new_name_list = []
# 遍历列表, 就是循环列表, 列表中每一个元素都拿出来
for name in name_list:
# 判断元素是否在新列表中, 如果在新的列表中, 则跳过, 如果不在则添加
if name in new_name_list:
continue
else:
new_name_list.append(name)
print(new_name_list)
- 判断闰年并写入列表中
"""
1.判断闰年,将0-2020之间的闰年写入列表中
1.能整除4不能被100整除
2.能被400整除
"""
# 写while, 第一步先设一个变量,给一个初始值(根据实际情况而定)
# 见名知意, 创建一个变量根据变量的含义命名.
year = 1
# while 判断条件, 当条件成立则执行while的子语句, 如果不成立结束循环.
# 创建一个放闰年的列表
leap_year_list = [] # 建议用下划线连接单词
# leapYearList = [] 驼峰命名法
# 创建一个放 不是闰年的列表
not_leap_year_list = []
while year <= 2020:
# % 取余数, != 不等于
if year % 4 == 0 and year % 100 != 0:
# %s 通用占位符, 拼接字符串.
print("%s 是闰年" % year)
leap_year_list.append(year) # 列表后打点 . 调用 append() 将变量添加到列表中.
elif year % 400 == 0:
# format() 函数, 拼接字符串.
print("{} 是闰年".format(year))
print(f"{year} 是闰年")
leap_year_list.append(year)
else:
print("{y} 不是闰年".format(y=year))
not_leap_year_list.append(year)
year += 1
print("闰年列表: ", leap_year_list)
print("不是闰年列表: ", not_leap_year_list)
- 使用列表实现登陆注册系统
登陆注册系统.
1.登陆
键盘输入: 账号,密码 都是字符串.
username_list = [] 账号的列表
password_list = [] 密码的列表
注意: 账号和密码在列表中存放的索引要一一对应
1.从键盘上输入一个账号, 判断列表中有没有这个账号.
2.如果有说明账号存在, 下一步去验证密码
3.通过账号的索引跟密码在列表中的索引一致. 通过索引找密码
4.验证密码通过则登陆成功.
2.注册
1.输入账号, 验证是否存在, 存在则重新输入, 不存在则注册
2.输入密码保存在密码列表中
3.修改密码
1.先登录, 然后获取账号的索引
2.根据账号的索引获取到密码进行修改
4.删除账号
1.先输入账号, 然后获取账号的索引, 删除账号
2.根据账号的索引获取到密码进行删除
# 账号: 6-20位, 字母, 数字, 键盘符号, 账号不能重复.
username_list = ["root", "user"]
# 密码6-20位
password_list = ["123456", "123321"]
while True:
print("""
----------------------------------------
| 欢迎登陆汇盛教育官网 |
----------------------------------------
1.登陆账号
2.注册账号
3.修改密码
4.删除账号
""")
# input(): 输入 print(): 输出, 打印
select_num = input("请输入您的选择: ")
# 判断输入的选项是登陆还是注册.
if select_num == "1":
print("正在进入登陆界面...")
print("""
----------------------------------------
| 欢迎来到登陆界面 |
----------------------------------------
""")
username = input("请输入您的账号(账号长度6-20): ")
un_len = len(username) # len() 获取变量username(字符串类型)的长度
# 判断账号的长度, 是否符合规范
while un_len < 6 or un_len > 20:
print("您输入的账号长度不对!请重新输入")
username = input("请输入您的账号(账号长度6-20): ")
un_len = len(username)
# 去列表验证, 判断是否在列表中(in, 成员运算符)
if username in username_list:
print("账号输入正确")
# 调用列表的 index() 函数来获取username的索引.
un_index = username_list.index(username)
password = input("请输入您的密码(密码长度6-20): ")
# 拿到索引, 利用账号索引,去密码列表中获取密码
# 列表名[索引] : 通过索引拿到元素
psword = password_list[un_index]
if password == psword:
print("密码输入正确")
print("登陆成功!")
break
else:
print("密码输入错误")
else:
print("账号没有注册")
elif select_num == "2":
print("正在进入注册界面...")
print("""
----------------------------------------
| 欢迎来到注册界面 |
----------------------------------------
""")
print("请输入您要注册的账号")
new_username = input("请输入(6-20位, 字母,数字,符号)账号: ")
if new_username in username_list:
print("账号已存在请重新输入")
new_username = input("请输入(6-20位, 字母,数字,符号)账号: ")
else:
print("账号可用,恭喜!")
username_list.append(new_username)
print("账号已经添加")
new_password = input("请输入您的密码(6-20): ")
second_input = input("请确认您的密码(与上边密码保持一致): ")
if second_input == new_password:
print("密码正确, 正在保存...")
password_list.append(new_password)
print("恭喜你! 账号注册成功")
else:
print("您前后输入的密码不一致, 请重新输入.")
new_password = input("请输入您的密码(6-20): ")
second_input = input("请确认您的密码(与上边密码保持一致): ")
elif select_num == "3":
print("正在进入修改密码界面...")
print("""
----------------------------------------
| 欢迎来到修改密码界面 |
----------------------------------------
""")
username = input("请输入您的账号(账号长度6-20): ")
un_len = len(username)
while un_len < 6 or un_len > 20:
print("您输入的账号长度不对!请重新输入")
username = input("请输入您的账号(账号长度6-20): ")
un_len = len(username)
if username in username_list:
print("账号输入正确")
# 这个地方我们已经拿到了账号密码的索引.
un_index = username_list.index(username)
password = input("请输入您的密码(密码长度6-20): ")
psword = password_list[un_index]
if password == psword:
print("密码输入正确")
print("登陆成功!")
print(">>>>>>>>>>>开始修改密码>>>>>>>>>")
old_password = input("请输入原密码: ")
while old_password != psword:
old_password = input("请重新输入原密码: ")
new_password = input("请输入新的密码(密码长度6-20): ")
second_input = input("请确认新的密码(密码长度6-20): ")
while second_input != new_password:
print("前后密码输入不一致, 请重新输入!")
# time.sleep(5) # 这个地方就是停顿5秒钟再往下执行.
new_password = input("请输入新的密码(密码长度6-20): ")
second_input = input("请确认新的密码(密码长度6-20): ")
print("正在保存新密码!")
# 1.直接修改
# password_list[un_index] = new_password
# 2.先删除旧密码, 然后保存新密码, 保存到指定索引位置
password_list.pop(un_index)
# insert(): 在列表指定的位置插入数据.
password_list.insert(un_index, new_password)
print("密码已经修改, 请重新登录")
else:
print("密码输入错误")
elif select_num == "4":
print("正在进入注销界面...")
print("""
----------------------------------------
| 欢迎来到登陆界面 |
----------------------------------------
""")
username = input("请输入您要删除的账号: ")
un_index = username_list.index(username)
# 1.del: 关键字 删除
del username_list[un_index]
# 2.pop(): pop() 是一个函数, 函数后边有括号, 括号中要放入参数
username_list.pop(un_index)
# 3.remove(): 函数, 移除某个元素
username_list.remove(username)
# 删除密码必须使用索引删除, 因为密码会重复, 只有删除指定索引才能删除对应账号的密码
password_list.pop(un_index)
print("账号密码已经被删除!")
else:
print("没有这个选项")