列表
用于存储大量元素时候使用列表
列表(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("没有这个选项")