Python_基础语法_组合数据类型_列表_元组_字典_集合(4)

本节概要:组合数据类型

                 一、列表 list
                 二、元组 tuple
                 三、集合 dict
                 四、字典 set

扩展:
命令行清屏 import os # 告诉 python 解释器,我们要使用os(operation 操作 system 系统)功能
os.system(“cls”) # cls:cleans 清除

  • 通过dir() help非常实用 本章有提到QAQ
  • 如通过 help(list.append)查看 append()方法的作用,dir(dict)

组合数据类型 知识 内容 特性
list 列表 [ ] 增删改查 1、什么是列表
2、列表怎么声明
3、列表的操作(增删改查)
列表list 中可以存储有顺序、可重复、不同数据类型的多个数据 [可以索引]
tuple 元组() 元组特性 1、什么是元组
2、元组的声明
3、元组的操作
4、使用场景
可以存储有顺序的存放可以重复不同数据类型[一旦存放无法修改、可索引]
set 集合 {} 结合特性和数学运算 1、集合的特点
2、集合的声明
3、集合的操作
4、适用场景
无序性、不可重复、不同数据[不可索引]
dict 字典 {“键”:“值”} 增删改查 1、字典的特点
2、字典的声明
3、字典的使用
4、适用场景(案例:用户登录)
{“key”:“value”}key不可以重复、value是可以重复的,存放的数据没有顺序[不可索引]

一、列表

返回文章顶部

1、什么是列表?

列表是组合数据类型的一种,可以按照有顺序的方式、存储不同数据类型的、可以重复的多个数据。

列表和变量一样,都是需要声明之后才能使用的!列表的操作方式有两种

  • 声明列表
  • 列表(数据容器)可以执行增删改查操作

2、列表怎么声明?

声明一个空列表 使用python关键词声明优先推荐 a = list()
声明一个空列表 使用符号声明 names = [ ]
声明一个非空列表 使用符号声明 names = [“wenwnec9”,1,“jane”]
声明一个空列表 使用符号声明不推荐,繁琐 names = list([ “wenwenc9”,1])
类型转换 s = “wenwnec9”
s2 = list(s)
其它类型转为为列表数据

3、列表的操作

列表的常见操作:列表作为一个数据容器,存放大量的数据
生活中/代码中,对于容器中的数据的操作方式,固定的四种方式

  • 增加数据
  • 删除数据
  • 修改数据
  • 查询数据 遍历数据[for 循环遍历数据,将所有的数据依次查看]
  • 序列 索引 切片 解包 边界检查 列表嵌套 深浅拷贝

序列 索引 切片

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
序列解包
在这里插入图片描述
在这里插入图片描述

(1) 增加数据

names = lsit( )

方法 描述 案例
names.append() 列表末尾增加数据 names.append(“卢本伟”)
names.insert() 列表的指定位置增加数据 names.insert(0,“55开”)
names.extend() 列表末尾增一组数据 ,如果是列表,将列表拆开依次追加 names.extend([“稳稳c9”,“admin”])

在这里插入图片描述
(2) 修改数据

假设 names = [“2”,“稳稳”]

操作 描述 案例
L[编号] = 新数据 将数据存储在指定编号的位置,该位置原有的数据就被覆盖了 names[1] = “10086”
names = [“2”,“10086”]

(3) 查询数据

查询数据,就是确认数据在列表中的保存方式

  • 全部查看
  • 查看某个数据的位置
  • 查看某个位置的数据
  • 查看某个数据出现的次数
操作 描述 案例
for 循环遍历 查询列表中的所有数据 for a in names
直接使用列表名称 查看所有数据,固定查看方式 print(names)
names.index() 查看某个数据第一次出现的位置 names.index(“稳稳”)
names[编号] 通过编号查看某个位置的数据 names[0]
names.count() 查看某个数据出现的次数 names.count(“稳稳”)

案例操作:

#定义一个列表
names = ["1","老王","稳稳","2","1"]

#for 循环遍历
for key in names :
    print(key)

#直接使用列表明
print(names)

#查看某个第一次数据出现的位置
print(names.index("稳稳"))

#通过编号
#可以通过len()知道列表有多少个元素 这里得到结果5 元素索引从0开始
a = len(names)
print(a)
print(names[2])

#计算某个数据出现的次数
print(names.count("1"))

(4) 删除数据

删除数据的操作:如果列表中出现了一些不需要的数据,可以按照指定的方式进行删除
类似项目中~
用户担心自己的账号信息泄露~一旦不再使用某个网站,就会注销账号[删除]
用户删除自己相册中的照片数据.

操作 描述 案例
names.remove 删除指定的一个数据 names.remove(“稳稳”)
names.pop() 删除末尾一个数据
如果是names.pop(编号) 就可以指定位置的数据
names.pop()
names.pop(2)
del names[编号] python 语法删除数据 del names[2]
names.clear() 清空列表 将列表中的所有数据全部删除

代码:

#定义一个列表
names = ["1","老王","稳稳","2","1"]

#remov()
names.remove("1")
print(names)

#pop()
names.pop()
print(names)

#del names[编号]
del names[0]
print(names)

#clear()
names.clear()
print(names)

(5) 其它操作

操作 描述
names.sort() 对列表中的数据排序
注意:列表中的数据必须都是同一种数据类型
names.reverse() 将列表中的数据翻转
len(names) 获取列表中的所有数据个数
max(names) 获取列表中的最大一个数据,所有数据都必须是同一种数据类型-并且数据时可以比较的
min(names) 获取最小数据,同一种数据类型

在这里插入图片描述
案例操作:
(6) 边界检查

在这里插入图片描述

(7) 列表嵌套

在这里插入图片描述

(8) 列表深浅拷贝

预备知识
Python 中的数据类型包括:bool、int、float、str、set、list、tuple等等。我们大致可以将这些数据类型归类为简单数据类型和复杂数据类型
简单数据类型:bool、int、float、str
复杂数据类型:list、tuple、set、dict

这里单独拿出来参考我的另外篇文章:https://blog.csdn.net/weixin_44238683/article/details/105730962

(9) 案例操作

案例一:学生信息等级系统

"""
学生信息录入系统
    开发步骤
    1、定义一个首页界面[告诉我们要做什么]
    2、定义变量~保存所有小伙伴
    3、通过用户输入的选项,执行判断
    4、实现各项的功能
    5、测试功能运行是否正确
    6、BUG完善
"""
import os

# 保存直播大厅所有伙伴的列表
students = list()

while True:
    # 首页
    os.system("cls")
    print("        直播大厅")
    print("~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~")
    print("          1、查看所有小伙伴")
    print("          2、录入个人信息")
    print("          3、查看个人信息")
    print("          4、退出系统")
    print("~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~")

    # 用户输入选项
    c = input("请输入您的选项:")
    if c == "1":
        # 遍历所有小伙伴
        for stu in students:
            print("小伙伴:", stu)
        print("~~~~~~~~~~~~~~~~~~~~~~~~~")
        input("查看完成按任意键返回首页.")
    
    elif c == "2":
        # 提示用户输入姓名
        while True:
            name = input("请输入昵称:")
            if name in students:
                input("该昵称已经存在,请使用其他昵称录入")
            else:
                # 保存昵称:列表的末尾追加
                students.append(name)
                input("录入完成,按任意键返回首页...")
                break

    elif c == "3":
        # 提示用户输入要查看的昵称
        nickname = input("请输入要查看的昵称:")
        # 成员成员运算符,判断昵称是否包含在列表中[True/False]
        if nickname in students:
            print("该成员已经在大厅中.")
        else:
            print("该昵称代表的成员没有在大厅中.")
        input("查看个人信息,正在升级中...")

    elif c == "4":
        input("退出系统,保存好个人数据,按任意键退出")
        exit(1)


案例二:多用户登录流程[简易版]

"""
多用户登录,简易版
    单独一个用户怎么表示?包含账号+密码
    用户 = [账号, 密码]
    user1 = ["admin", "123456"]
    user2 = ["wenwen", "111111"]

    多个用户怎么表示?
    users = [user1, user2]  1
    等价
    users = [ ["admin", "123456"], ["wenwen", "111111"] ] 

    简易版登录怎么实现? 懂 5  看不懂 1
        用户输入了:admin, 123456
          把输入的数据组装成列表 登录的用户 ["admin", "123456"]
          通过成员运算符直接判断 登录的用户 in users
            [True登录成功/False登录失败]
"""
import os

# 系统中存在两个用户
users = [
    ["admin", "123456"],  # 第一个用户
    ["wenwne", "111111"]    # 第二个用户
]

while True:
    #  用户登录
    os.system("cls")
    print("    ~用户登录")
    username = input("请输入账号:")
    password = input("请输入密码:")

    # 将用户输入的数据组装成列表
    u = [username, password]

    # 使用成员运算符进行了判断
    if u in users:
        input("登录成功,按任意键进入首页")
        print(" 直播大厅-首页界面")
        input("首页功能正在升级中,按任意键继续...")
    else:
        input("登录失败,按任意键重新登录")

案例三:多用户登录流程[升级版]

"""
案例操作:多用户登录

    单个用户?账号+密码+昵称
        用户 = [账号, 密码, 昵称]
        user1 = ["admin", "123", "管理员"]
        user2 = ["wenwenc9", "111", "稳稳c9"]

    多个用户?
        users = [user1, user2]
        等价于
        users = [ ["admin", "123", "管理员"], ["wenwenc9", "111", "稳稳c9"]]
 
    用户登录:
        用户输入:账号 + 密码
        此时,~不能使用成员运算符了!【问题的重点】
            ["admin", "123"] in users   False[缺少昵称]
        这时候,我们就必须得遍历整个列表users~判断账号+密码是否正确
"""
import os

# 系统中的所有用户
users = [ 
    ["admin", "123", "管理员"],
    ["wenwenc9", "111", "wenwne"]
]

# 定义变量~判断用户登录成功(True)或者失败(False)
# 程序刚开始运行的时候,没有用户登录,所以默认False
ok = False
# 登录后的昵称: 没有用户登录的时候~ 没有昵称
n = ""

while True:
    # 多用户登录
    username = input("请输入账号:")
    password = input("请输入密码:")

    # 判断登录是否成功:遍历所有用户
    for u in users:
        # 第一次循环:u -> ["admin", "123", "大牧"]
        if username == u[0] and password == u[1]:
            input("登录成功,按任意键继续")
            ok = True # 登录成功
            n = u[2]     # 记录昵称
            break
    # [所有数据全部遍历完了]~没有发现正确的账号+密码,登录失败
    else:
        input("账号或者密码有误,请重新登录")
        ok = False

    # ok的目的:根据用户登录是否成功,判断要不要展示首页
    if ok == True:
        # 用户登录了,展示首页
        print("    欢迎进入游戏首页界面")
        print("尊敬的用户", n, ",欢迎进入xx游戏")
        input(" 首页功能正在升级中,按任意键继续")

案例四:用户注册+登录

"""
用户注册+用户登录简易版
    原有的简易版用户登录
    增加一个功能:用户注册
"""
import os

# 系统中存在两个用户
users = [
    ["admin", "123456"],  # 第一个用户
    ["wenwenc9", "111111"]    # 第二个用户
]

while True:
    # 登录菜单
    os.system("cls")
    print("■"*20)
    print("     1、用户登录")
    print("     2、用户注册")
    print("     3、退出系统")
    print("■"*20)

    #用户输入选项
    c = input("请输入您的选项:")
    if c == "1":
        # 用户登录:直接使用demo06中的登录代码
        # 复制粘贴代码时,一定要注意缩进的问题~自己找不出错误:老师
        while True:
            #  用户登录
            os.system("cls")
            print("用户登录")
            username = input("请输入账号:")
            password = input("请输入密码:")

            # 将用户输入的数据组装成列表
            u = [username, password]

            # 使用成员运算符进行了判断
            if u in users:
                input("登录成功,按任意键进入首页")
                print("中公直播大厅-首页界面")
                input("首页功能正在升级中,按任意键返回登录界面...")
                break
            else:
                input("登录失败,按任意键重新登录")

            break
        #####################################
    elif c == "2":
        # 简易版用户注册
        # 提示用户输入账号,输入密码
        username = input("请输入注册账号:")
        password = input("请输入注册密码:")
        # 将用户输入的数据,组装成一个列表
        user = [username, password]
        # 将用户数据,添加到系统用户中:末尾追加一个新用户
        users.append(user)
        input("注册成功,按任意键返回登录菜单")

    elif c == "3":
        input("系统将退出,保存好个人数据,按任意键结束")
        exit(1)
    else:
        input("没有这个选项,按任意键继续.")



二、元组

返回文章顶部

1、什么是元组

元组也是组合数据类型的1种,可以有顺序的存放可以重复的,可以使不同数据类型的多个数据,数据一旦存放到元组中,不可以改动

2、元组的声明

Pyhton 中通过tuple表示元组
(1) 声明空元组
声明空元组没有任何意义,下面的语法只会在找工作中笔试题中出现

t = tuple() #声明一个元组[空] - 推荐

t2 = () #声明了一个元组[空] -很容易和四则运算的小括号混淆

(2) 声明一个元素的元组
声明一个元素的元素,没有意义,一般情况下载笔试题中出现

t = tuple([“a”]) # 这是包含一个数据的元素,不推荐的语法~类型转换

t2 = (“a”,) #声明了只包含一个元素的元组~一定要那个逗号

t3 = (“a”) #这不是元组,括号~就是四则运算的括号等价于 t3=“a”

(3) 声明多个元素的元组

t = (“春”、“夏”、“秋”、“冬”) # 声明有一个包含四个元素的元组,推荐

t = tuple([“春”、“夏”、“秋”、“冬”]) #不推荐,繁琐

3、元组的操作

声明的元组中已经包含了多个数据,我们需要对数据进行处理,思考元组中都提供了那些操作方法?依赖 python
提供的交互模式:dir()help() 查看操作方式
在这里插入图片描述

操作 描述 案例
T.count() 查询一个元素出现的次数 t.count(“春”)
T.index() 查询一个元素出现的位置 t.index(“秋”)
T[编号] 查询指定位置的元素 t[2] # 结果 :秋
len(T) 查询元组中的元素的个数

4、使用场景

由于元组中的数据不能改动,给项目中的一些长时间不需要改动的数据提供了方便:用户的角色[游客、普通会员、VIP会员、管理员]
在这里插入图片描述

三、集合

返回文章顶部

1、集合的特点

集合 set 是组合数据类型中的一种,集合中可以存放没有顺序的、不可重复、可以是不同数据类型的多个数据

2、集合的声明

在python中通过set 表示集合
(1) 声明空集合

s1 = set() #声明了一个空集合!

s2 = {} # 集合没有这样的声明方式·直接这样写声明了一个字典

(2) 声明非空集合

s1 = {“A”,“b”,“C”,“d”} # 推荐的非空集合声明方式

s2 = set{[“A”,“b”,“C”,“d”]} #另外一种声明方式 繁琐 列表做了类型转换 得到一个集合

3、集合的操作

dir(set)
['add’增加,
'clear’清空集合,
'copy’复制一个集合,
‘pop’, 随机删除一个集合中的数据[集合中的数据没有顺序]
‘remove’, 删除一个指定的数据,如果数据不存在就会报错
‘discard’, 删除一个指定的数据,如果数据不存在什么都不做
‘isdisjoint’,
‘issubset’, s1 集合中的数据是不是包含在 s2 集合中,等价于 s1 < s2
‘issuperset’, s1 集合是不是包含了 s2 集合中你的数据,等价于 s1 > s2
‘difference’, 获取 s1 集合和 s2 集合的差集
‘difference_update’, 获取 s1 和 s2 的差集并将结果数据更新到 s1 中
‘intersection’, 获取 s1 集合和 s2 集合的交集
‘intersection_update’, 获取 s1 和 s2 的交集并将结果更新到 s1 中
‘symmetric_difference’, 获取 s1 和 s2 共同的差集
‘symmetric_difference_update’, 获取共同的差集并更新到 s1 中
‘union’, 获取 s1 和 s2 的并集
‘update’ 获取 s1 和 s2 的并集,并将数据更新给 s1
]

笔试题~经常出现集合的操作
(1) 单个集合的操作

s = set()
s.add(“稳稳”) #增加一个数据
s.clear() #清空数据
s2 = s.copy() #复制s集合
s.pop() 随机删除一个数据
s.remove(“x”), #删除一个指定的数据,如果数据不存在就会报错
s.discard(“x”) #删除一个指定的数据,如果数据不存在什么都不做

(2) 两个集合的操作

① 声明两个集合

  • s1 = {1,2,3,4,5}
  • s2= {4,5,6,7,8}
    在这里插入图片描述

其他的交集、并集、共同的差集操作方式类似:
在这里插入图片描述
在这里插入图片描述

4、适用场景

集合主要用在项目中右剔除重复要求的业务流程中,账号,昵称,身份号码
注意:集合在笔试题中经常出现[一套笔试题~1到 2道集合的操作题]
在这里插入图片描述

四、字典

返回文章顶部

1、字典的特点

字典是项目开发过程使用平率最高的一个组合数据类型,可以存放键值对{“键”:“值”},其中key不可以重复,value可以重复,存放的数据没有顺序。

2、字典的声明

python 中使用dict表示字典,可以存放 key:value 键值对数据。
在这里插入图片描述

(1) 声明空字典
d1 = {} #声明了一个空字典~可读性差 不推荐
d2 = dict() #声明了一个空字典:推荐 可读性最好
(2) 声明非空字典
user = {“username”:“admin”,“passowrd”:“123456”} #推荐
user2 = dict([(“username”,“admin”),(“password”,“123456”)]) #不推荐繁琐 数据转换

3、字典的使用

python中使用dict 表示字典,字典中存放的是没有顺序的键值对,其中key不可以重复,value可以重复
在这里插入图片描述
(1)查询获取数据
D.items()获取所有的键值对 key:value
D.keys()获取所有的 key 数据
D.values()获取所有的 value 数据
D.get(k) 获取 k 对应的 value 数据 等价于 D[k]
(2)删除数据
D.pop(k) 删除 k 对应的键值对,等价于 del D[k]
D.popitem() 随机删除一个键值对
(3)修改数据
D.setdefault(k, v) 如果 k 不存在,增加 K:v 到字典中,如果 k 存在什么都不做
D.update(k, v) 如果 k 不存在,增加 k:v 到字典中,如果 k 存在更新对应的 v 等价于D[k] = v
(4)增加数据数据
D.setdefault(key, value) 只有 key 在字典中不存在的情况下,新增一个键值对数据
D.update({key:value}) 只有 key 在字典中不存在的情况下,新增一个/多个键值对数据
D[key] = value 只有 key 在字典中不存在的情况下,新增一个键值对数据

4、适用场景

返回文章顶部

通过案例说明:

"""
字典案例操作
    用户登录
"""
# 定义保存用户的字典
'''
类似生活中,一个人的字符串姓名就是key,这个人本身就是value
一堆人 = {
    "稳稳": {"账号": "稳稳", "密码": "123456"}, # 一个用户
    "老刘": {"账号": "老刘", "密码": "111111"}
}  
'''
users = {
    "wenwen": {"username": "wenwen", "password": "123456"},
    "laoliu": {"username": "laoliu", "password": "111111"}
}

# 用户登录
while True:
    # 提示用户输入信息
    username = input("请输入账号:")
    password = input("请输入密码:")

    # 判断账号是否存在
    '''
    "wenwen" in users : "wenwen"字符串,在users字典的key中是否存在?存在True/不存在False
    成员运算符,判断一个数据是否包含在一个字典的key中。
    '''
    if username in users:
        # 用户存在,根据key获取对应的用户
        # users.get("wenwen") 得到 {"username": "wenwen", "password": "123456"}
        user = users.get(username) # username: "wenwen" | "laoliu" | "xxx"
        # 判断用户输入的密码是否相等 user={"username": "xxxx", "password": "xxxx"}
        if password == user.get("password"): # 123456
            input("输入正确,登录成功!")
        else:
            input("密码错误,按任意键返回")

    else:
        input("用户账号不存在. 按任意键返回")

列表,元组,字典,集合的比较
在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/weixin_44238683/article/details/105712517