元组&字典&集合

一.元组-tuple

特殊的序列,了解基本的使用即可

元组是一组不可变的序列,用()来创建,逗号分割,支持下标切片等操作 , 列表会预留空间,所以可以增加元素,如果变量数量固定,建议使用元组,占用空间可能更小

列表: [1,2]

元组: (1,2)

  • 是一个容器,存储各种类型元素 ,可以联想另外一种不可变的序列
  • 遵循序列的使用方式,每个元素都有唯一的位置,称为索引
  • 内容不可变
1.创建
  • 直接赋值
  • 使用tuple函数
2.基本使用
  • 循环遍历
  • 查询
  • 切片
date = (1,False,1,'张无忌')
print(f"序列访问:{date[1:3]}")  # 序列访问1到3的位置
date2 = tuple(['哈哈', 1])
# 如果元组是单个元素,需要在该元素后面添加一个逗号
date3 = ('哈哈')
print(f"单个元组:{date3},没有逗号的类型:{type(date3)}")
date3 = ('哈哈',)
print(f"单个元组:{date3},有逗号的类型:{type(date3)}")
# 特殊写法
date4 = 1,2
a, b, = 1, 2
#也是元组,一一对应

# 遵循序列的使用方式
print(f'序列访问:{date[1]}')
print(f'序列访问:{date[1:3]}')  # 算1不算3
for i in date:
    print(i)
#一一打印

# 元组不可变
# eg:改变
# date[3] = '彭于晏'
print(f'访问data2: {date2}')
print(f'访问data3: {date3},访问他的类型: {type(date3)}')
print(f'访问data4: {date4},访问他的类型: {type(date4)}')
print(f'a={a},b={b}')

# 只支持常规的查询操作
print(f'查询操作count:{date.count("张无忌")}')
print(f'查询操作index:{date.index("张无忌")}')

二.字典-dict


2 先来看一组数据


一个人的信息包含:
                '姓名': "彭于晏"
                '年龄': 18,
                '身高': '181cm',
                '爱好': ['篮球', '麻将','钓鱼]

name = '彭于晏'
age = 18
height = '181cm'
hobby = ['篮球', '麻将','钓鱼']

如果数据变成多个人?

2.1 更加高效的定义方式

人的信息 = {

        '姓名': '彭于晏',

        '年龄': '18',

        '身高': '178cm',

        '爱好': ['篮球', '麻将','钓鱼']

}

这种数据定义的方式就是字典!

2.2 字典的定义

观察发现字典的结构.

字典名 = {
    'key名' : 'value名' ,
    'key名' : 'value名',
    ....  
}

 

  • 字典是一个无序(没有索引)、可变的容器
  • 键和值组成 键为key 值为value
  • 可以存储任意数量的数据,每一组数据都有唯一的键值,键和值之间: 使用 : 隔开
  • 字典使用符号"{}" 表示
  • key: key不可变,可以使用数字,字符串,元组,不能使用列表,而且是唯一的
  • value: value可以重复,可以是任何数据类型
2.3 创建字典
  • 创建字典
  • 字典的基本特征: key不可变,并且唯一, value可以重复
  • 其他方式
# 1.直接创建
person = {
    'name': '令狐冲',
    'age': 20,
    'name': '宋江',
    '学科': ['计算机导论', '计算机组成原理', '线性代数']
}
# 出现了两个'name',那么第二个name将会将第一个name的值替换
# ① key是唯一的,如果出现同名的key,后面的会覆盖前面的数据
# ② value是可以重复的
# ③ 无序,无法使用索引的方式访问数据
# ④ 访问数据的方式: 字典名[key]  或者 字典名.get(key)

print(f"访问字典1:{person['age']}")
print(f"访问字典2:{person.get('age')}")
print(f"访问字典2:{person['学科'][1]}")
print(f'访问字典3: {person["学科"][1]}')

# 如何计算个数: len() 或者循环累加
print(f"计算元素的个数:{len(person)}")


# 2.修改元素
# 列表通过索引去定位
data = ['哈哈']
data[0] = '嘿嘿'
# 字典通过key去定位
person['age'] = 30
print(person)
2.4 常用函数
  • 新增: 构建一个不存在key,相当于增加
  • 删除:
  1. 根据指定的key删除: pop(key)
  2. 清空字典: clear()
  3. 删除尾部元素: popitem()
  • 修改: 给已经存在的key重新赋值,相当于更新
  • 查询: 字典名[key]和字典名get(key)
beauty = {
    'name':'张欣怡',
    'age': 19
}
# 1.新增和更新
#   ①如果添加同名key,则会更新原有key的数据
#   ②如果添加不存在的key,则会添加元素
beauty['age'] = 18
beauty['类型'] = '爱搞怪'
print(f'添加以后字典的元素: {beauty}')
# 2.删除元素
# ① pop(key):删除指定key的元素
beauty.pop('age')
print(f"使用pop删除元素后:{beauty}")
# ② popitem() : 删除末尾的元素
beauty.popitem()
print(f"使用pop删除元素后:{beauty}")
# clear:清空
beauty.clear()
print(f"使用pop删除元素后:{beauty}")
2.5 案例演示

① 学籍注册管理

  • 学生有: 学号/姓名/年龄/性别等信息
  • 注册学生信息

"""
@FileName: 学籍注册.py
    代码的需求逻辑:
    1.学生的信息: name,学号,年龄,专业
    2.注册学生信息
    3.如果该学生已经注册,提示'已注册'
    4.可以提前终止注册流程
    {
        '学号1': {'name':'王麻子', 'age':18, '专业':'计算机科学与技术'},
        '学号2': {'name':'李大嘴', 'age':18, '专业':'计算机科学与技术'},
        '学号3': {'name':'王大锤', 'age':18, '专业':'计算机科学与技术'}
    }
    [
        ['学号1','王麻子1', 18, '计算机科学与技术'],
        ['学号2','王麻子2', 18, '计算机科学与技术'],
        ['学号3','王麻子3', 18, '计算机科学与技术']
    ]

"""

stu_ms = {}

while True:
    num = input("请输入您的学号或者输入Q退出")
    if num == 'Q':
        break
    else:
# 4.针对输入的q.判断是否已经被注册
        if num in stu_ms.keys():
            print("该学生已注册")
        else:
# 5.没有注册过,则可以注册
# stu_ms[num] ={
#   'name': input('请输入您的姓名:'),
#   'age':18,
#   '专业':'计算机科学与技术'
# }
            stu_ms[num] = {}
            stu_ms[num]['name'] = input("请输入您的姓名:")
            stu_ms[num]['age'] = input("请输入您的年龄:")
            stu_ms[num]['专业'] = input("请输入您的专业:")
print(stu_ms)



stu_ms = {}
while True:
    num = input("请输入您的学号,输入Q退出:")
    if num == "Q":
        break
    else:
        if num in stu_ms.keys():
            print("该学生已注册")

        else:
            stu_ms[num]= {
                'name':input("请输入您的姓名"),
                'age':input("请输入您的年龄"),
                '专业':input("请输入您的专业:")
            }
print(stu_ms)
            
2.6 循环遍历
  • 获得所有的key: 字典名.keys()
  • 获得所有的键值对: 字典名.items()
  • 获得所有的value: 字典名.values()

hero = {
    'name': '庄周',
    'blood': 100,
    'style': '肉坦法师'
}
# 1.直接使用for循环相当于依次获取字典的key
for i in hero:
    print(f"字典的key:{i},字典的value:{hero[i]}")
# 1的变种方式: 获得所有的key--> 字典.keys()
# for i in hero.keys():
#     print(f'字典的key: {i},字典的value: {hero[i]}')
print('-' * 50)
# 2.获得所有的value:--->字典.values(
for i in hero.values():
    print(f"获得的value值:{i}")
print('-' * 50)
# 3.获得所有的键值对: ---> 字典.items()
#   获得每一组值
for i in hero.items():
    print(f'字典的key: {i[0]}, value: {i[1]}' )   # 0代表key  1代表value
for i, j in hero.items():
    print(f'字典的key: {i}, value: {j}')

2.7 字典推导式-[选择使用]

{ key表达式: value表达式 for 变量 in 容器 if 条件}

  • key和value的表达式可以根据变量来获得
  • 如果业务复杂,不建议使用
 key表达式: value表达式   for 变量  in 容器  if 条件}
# 回忆列表推导式
data_1 = [i for i in range(3)]
print(f'新的列表: {data_1}')
# 字典 = {key: value for 变量 in 可遍历数据 if 条件}
data_2 = {i: '哈哈' for i in range(3)}
# data_2 = {i: '哈哈'+i for i in range(3)}
print(f'新的字典: {data_2}')

# 需求:获得一个新字典,根据data_3,要求所有的key变成大写
data_3 = {'a': 1, 'B': 3, 'c': 4}
data_4 = {i.upper(): j for i, j in data_3.items()}
print(data_4)

3 字典的相加


存在一个字典,要将其值相加


my_list = {'a':1,'b':2,'c':3}
sum = 0
for i in my_list.values():
    sum += i
print(sum)

sti = {'a':[1,2],'b':[3,4]}
total = 0
for key in sti:
    for element in sti[key]:
        total += element
print(total)
3.1 获取值,并存入列表
dic_1 = { 'python': 95,  'java': 99,    'c': 100}

# 6. 获取所有的value值,存储在列表里
value_li = (c for c in dic_1.values())

key_list = list(dic_1.keys())
print(f"value值:{key_list}")

valuess = []
for j in dic_1.values():
    valuess.append(j)
    print(f'获得的value值:{valuess}')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值