字典、元组、集合内置方法

字典的内置方法

1.类型转换
dict()
d1 = {
    'name': 'jason',
    'age': 18,
    'hobbies': ['play game', 'basketball'] 
}
# 1.按key取值
print(d1['name'])  # jason  键存在
# print(d1['xxx'])  # 键不存在直接报错
"""涉及到字典取值 更加推荐下面的方式"""
print(d1.get('name'))  # jason  键存在
print(d1.get('xxx'))  #  键不存在不会报错 而是返回None
print(d1.get('xxx', 'name'))  # 第二个参数不写默认返回None 写了则返回写了的
print(d1.get('name', '这个键不存在'))  # 如果键存在 则不需要使用到第二个参数

# 2.修改值 字典也是可变类型
print(id(d1))
d1['name'] = 'jasondsb'  # 键存在是修改值
print(d1, id(d1))
# 3.添加键值对
d1['pwd'] = 123  # 键不存在则是新增一个键值对
print(d1)
# 4.统计字典中键值对的个数
print(len(d1))  # 3
# 5.成员运算  也只能判断key而已
print('jason' in d1)# False
print('name' in d1)  # True

# 6.删除键值对
del d1['name']  # 通用的删除方式
print(d1)  # {'age': 18, 'hobbies': ['play game', 'basketball']}
print(d1.pop('age'))  # 18  弹出
print(d1)  # {'hobbies': ['play game', 'basketball']}
d1.popitem()  # 随机弹出一个(使用频率很低 可以忽略)
print(d1)

# 7.获取所有的键 所有的值 所有的键值对
print(d1.keys())   # dict_keys(['name', 'age', 'hobbies'])  可以看成是列表
print(d1.values())  # dict_values(['jason', 18, ['play game', 'basketball']])  可以看成是列表
print(d1.items())  # dict_items([('name', 'jason'), ('age', 18), ('hobbies', ['play game', 'basketball'])])  可以看成是列表套元组
for v in d1.values():
    print(v)
"""在python2中上述三个方法就是直接返回一个列表 """

#######################需要了解######################
# 1.update更新字典
dic = {'k1': 'jason', 'k2': 'tony', 'k3': 'jy'}
dic.update({'k1': 'jn', 'k4': 'xxx'})
print(dic)  # 键存在则修改 键不存在则新增
# 2.fromkeys()快速生成字典
dic = dict.fromkeys(['k1', 'k2', 'k3'], [])
print(dic)  # {'k1': [], 'k2': [], 'k3': []}
"""笔试题"""
dic['k1'].append(111)  # 三个键指向的是同一个列表
print(dic)  # {'k1': [111], 'k2': [111], 'k3': [111]}
# 3.setdefault()
dic = {'k1': 111, 'k2': 222}
print(dic.setdefault('k3', 333))  # 键不存在则新增键值对 并且有返回结果是新增的v
print(dic)
print(dic.setdefault('k1', '嘿嘿嘿'))  # 键存在 则返回对应的值 不做修改
print(dic)

元组内置方法

# 可以看成是不可变的列表
1.类型转换
	支持for循环的数据类型都可以转成元组
    # print(tuple(11))  # 报错
    # print(tuple(11.11))  # 报错
    print(tuple('jason'))
    print(tuple([11,22,33,44]))
    print(tuple({'name':'jason'}))
    print(tuple({11,22,33,44}))
    # print(tuple(True))  # 报错
 2.元组的特性
	# t1 = (11, 22, 33, 44)
    # print(type(t1))  # <class 'tuple'>
    # t2 = (11)
    # print(type(t2))  # int
    # t2 = (11.11)
    # print(type(t2))  # float
    # t2 = ('jason')
    # print(type(t2))  # str   
    """当元组内只有一个元素的时候 一定要在元素的后面加上逗号"""
    # t2 = (11,)
    # print(type(t2))  # tuple
    # t2 = (11.11,)
    # print(type(t2))  # tuple
    # t2 = ('jason',)
    # print(type(t2))  # tuple
    """
   一般情况下 我们会习惯的将所有可以储存的多个数据的类型的数据
   如果内部只有一个元素 也会加逗号
        (1,)
        [1,]
        {1,}
        {'name':'jason',}
    """
     t1 = (11, 22, 33, 44, 55, 66)
    # 1.索引取值
    # print(t1[0])
    # print(t1[-1])
    # 2.切片操作
    # print(t1[1:4])
    # print(t1[-1:-4:-1])
    # print(t1[-4:-1])
    # 3.间隔
    # print(t1[1:4:2])  # (22, 44)
    # 4.统计元组内元素的个数
    # print(len(t1))  # 6
    # 5.成员运算
    # print(11 in t1)  # True
    # 6.统计某个元素出现的次数
    # print(t1.count(22))
    # 7.元组内元素不能"修改": 元组内各个索引值指向的内存地址不能修改
    # t1[0] = 111  # 报错
    """
    笔试题
        tt = (11, 22, 33, [11, 22])
        tt[-1].append('heiheihei')
        问:执行之后的结果   正确答案选B
            A.报错    B.正常添加   C.不知道   
    """
    tt = (11, 22, 33, [11, 22])
    print(id(tt[-1]))
    tt[-1].append('heiheihei')
    print(id(tt[-1]))
    print(tt)

集合内置方法

1.类型转换
	# print(set(11))  # 报错
    # print(set(11.11))  # 报错
    # print(set('jason'))
    # print(set([11,22,33,44]))
    # print(set({'name':'jason'}))
    # print(set((11,22,33)))
    # print(set(True))  # 报错
    """集合内元素只能是不可变类型"""
 """集合只会在去重和关系运算中使用 甚至有时候也不会用"""
2.两大功能
	1.去重
    	集合内不能出现重复的元素(自带去重特性)
        如果出现了 会被集合自动去重
    2.关系运算
    	判断两个群体内的差异	
        	eg:共同好友 共同关注 共同点赞
    # s1 = {1,1,1,1,1,1,2,2,2,2,2,1,2,3,2,2,1,2,3,2,3,4,3,2,3}
# print(s1)  # {1, 2, 3, 4}
# l = ['a', 'b', 1, 'a', 'a']
# s1 = set(l)
# l = list(s1)
# print(l)
# 关系运算
f1 = {'jason', 'kevin', 'tony', 'jerry'}  # 小李的好友列表
f2 = {'jason', 'tom', 'jerry', 'jack'}  # 小王的好友列表
# 1.求两个人的共同好友
# print(f1 & f2)  # {'jerry', 'jason'}
# 2.求小李的单独好友
# print(f1 - f2)  # {'kevin', 'tony'}
# 3.求两个人所有的好友
# print(f1 | f2)  # {'kevin', 'jack', 'tom', 'jason', 'jerry', 'tony'}
# 4.求两个人各自的好友
print(f1 ^ f2)  # {'jack', 'tony', 'tom', 'kevin'}

垃圾回收机制

"""python底层针对空间的申请和释放都是设计好的 不需要程序员操心"""
1.引用计数
	python会将引用计数为0的数据清除
    	name = 'jason'  # jason引用计数为1
        a = name        # jason引用计数为2
        '''内存中数据身上绑定的变量名的个数'''
        # ps:还可以了解一下循环引用的情况
2.标记清除
	当内存空间即将溢出(满了)的时候 python会自动启动应急机制
    停止程序的运行 挨个检查值的引用计数并给计数为0的数据打上标记
    然后一次性清理掉
3.分代回收
	根据值存在的时间长短 将值划分为三个等级(1,2,3)
    	等级1 检测机制每隔5s来一次
        等级2 检测机制每隔1min来一次
        等级3 检测机制每隔5min来一次       

习题

# 3.不使用count统计列表中指定元素出现的次数
l = [1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, ]
while True:

    target = input('请输入统计数据:').strip()
    if target.isdigit():
        count = 0
        target = int(target)
        for i in l:
            if target == i:
                count += 1
    print(f'{target}出现有{count}次')


# 2.利用列表编写一个用户注册、登录程序
# 	  提示:循环
#     要求:成功一次即可 无需考虑用户冲突等情况

# 1.先定义储存用户数据
data_list = []
# 2.循环打印功能 供用户执行选择
while True:
    # 3.打印功能序号
    print("""
    1.注册
    2.登录
    3.查看所有用户信息 
    """)
    # 4.获取功能编号
    chioce = input('输入执行编号:')
    # 5.判断执行几号
    if chioce == '1':
        username = input('username:').strip()
        password = input('password:').strip()
        # 6.1.判断用户名不能冲突
        for user in data_list:
    # 6.2.如果考虑密码是用户名 用户名是其他'
            if username == user.split('|')[0]:
                print('用户已存在')
                break
        else:
            # 7.将用户名和密码拼接到一起
            user_data = f'{username}|{password}'
            # 8.添加到列表中
            data_list.append(user_data)
            # 9.提示用户注册成功
            print(f'{username}注册成功')
    elif chioce == '2':
        username = input('username>>>:').strip()
        password = input('password>>>:').strip()
        user_data1 = f'{username}|{password}'
        for data in data_list:
            if user_data1 == data:
                print('登陆成功')
        else:
            print('用户或密码错误')

    elif chioce == '3':
        print(data_list)
    else:
        print('你能不能好好的输 眼瞎是吧!!!')
posted @   末笙  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示