本周回顾:列表、字典、集合、元祖、垃圾回收机制、循环、输出格式

本周回顾重点大概

  • 列表
  • 字典
  • 集合
  • 元祖
  • 垃圾回收机制
  • 循环
  • 输出格式

本周回顾详细

列表

1.类型转换
	list(其他数据类型)
	ps:能够被for循环的数据类型都可以转成列表
 	print(list('hello'))
    print(list({'name': 'jason', 'pwd': 123}))
    print(list((1, 2, 3, 4)))
    print(list({1, 2, 3, 4, 5}))
2.需要掌握的方法
	11 = [111, 222, 333, 444, 555, 666, 777, 888]
    # 1.索引取值(正负数)
    # print(l1[0])
    # print(l1[-1])
    # 2.切片操作    与字符串讲解操作一致
    # print(l1[0:5])
    # print(l1[:])
    # 3.间隔数 方向  与字符串讲解操作一致
    # print(l1[::-1])
    # 4.统计列表中数据值的个数
    # print(len(l1))  # 8
    # 5.数据值修改
    # l1[0] = 123
    # print(l1)
    # 6.列表添加数据值
    # 方式1:尾部追加数据值
    # l1.append('干饭')
    # print(l1)  # [111, 222, 333, 444, 555, 666, 777, 888, '干饭']
    # l1.append(['jason', 'kevin', 'jerry'])
    # print(l1)  # [111, 222, 333, 444, 555, 666, 777, 888, ['jason', 'kevin', 'jerry']]
    # 方式2:任意位置插入数据值
    # l1.insert(0, 'jason')
    # print(l1)
    # l1.insert(1, [11, 22, 33, 44])
    # print(l1)  # [111, [11, 22, 33, 44], 222, 333, 444, 555, 666, 777, 888]
    # 方式3:扩展列表 合并列表
    # ll1 = [11, 22, 33]
    # ll2 = [44, 55, 66]
    # print(ll1 + ll2)  # [11, 22, 33, 44, 55, 66]
    # ll1.extend(ll2)  # for循环+append
    # print(ll1)  # [11, 22, 33, 44, 55, 66]
    # for i in ll2:
    #     ll1.append(i)
    # print(ll1)
    # 7.删除列表数据
    # 方式1:通用的删除关键字del
    # del l1[0]
    # print(l1)
    # 方式2:remove
    # l1.remove(444)  # 括号内填写数据值
    # print(l1)
    # 方式3:pop
    # l1.pop(3)  # 括号内填写索引值
    # print(l1)
    # l1.pop()  # 默认尾部弹出数据值
    # print(l1)
    # res = l1.pop(3)
    # print(res)  # 444
    # res1 = l1.remove(444)
    # print(res1)  # None
    # 8.排序
    # ss = [54, 99, 55, 76, 12, 43, 76, 88, 99, 100, 33]
    # ss.sort()  # 默认是升序
    # print(ss)
    # ss.sort(reverse=True)
    # print(ss)  # 改为降序
    # 9.统计列表中某个数据值出现的次数
    # print(l1.count(111))
    # 10.颠倒列表顺序
    # l1.reverse()
    # print(l1)

字典

1.类型转换
	dict()
	字典的转换一般不使用关键字 而是自己动手转
2.字典必须要掌握的操作
	user_dict = {
    'username': 'jason',
    'password': 123,
    'hobby': ['read', 'music', 'run']
    }
    # 1.按k取值(不推荐使用)
    # print(user_dict['username'])  # jason
    # print(user_dict['phone'])  # k不存在会直接报错
    # 2.按内置方法get取值(推荐使用)
    # print(user_dict.get('username'))  # jason
    # print(user_dict.get('age'))  # None
    # print(user_dict.get('username', '没有哟 嘿嘿嘿'))  # jason   键存在的情况下获取对应的值
    # print(user_dict.get('phone', '没有哟 嘿嘿嘿'))  # 键不存在默认返回None 可以通过第二个参数自定义
    # 3.修改值数据
    # print(id(user_dict))
    # user_dict['username'] = 'tony'  # 键存在则修改对应的值
    # print(id(user_dict))
    # print(user_dict)
    # 4.新增键值对
    # user_dict['age'] = 18  # 键不存在则新增键值对
    # print(user_dict)
    # 5.删除数据
    # del user_dict['username']
    # print(user_dict)
    # res = user_dict.pop('password')
    # print(user_dict)
    # print(res)  # 123
    # 6.统计字典中键值对的个数
    # print(len(user_dict))  # 3
    # 7.字典三剑客
    # print(user_dict.keys())  # 一次性获取字典所有的键 dict_keys(['username', 'password', 'hobby'])
    # print(user_dict.values())  # 一次性获取字典所有的值 dict_values(['jason', 123, ['read', 'music', 'run']])
    # print(user_dict.items())  # 一次性获取字典的键值对数据  dict_items([('username', 'jason'), ('password', 123), ('hobby', ['read', 'music', 'run'])])
    # for i in user_dict.items():
    #     k, v = i
    #     print(k, v)
    # 8.补充说明
    # print(dict.fromkeys(['name', 'pwd', 'hobby'], 123))  # 快速生成值相同的字典
    # res = dict.fromkeys(['name', 'pwd', 'hobby'], [])
    # print(res)  # {'name': [], 'pwd': [], 'hobby': []}
    # res['name'].append('jason')
    # res['pwd'].append(123)
    # res['hobby'].append('study')
    # print(res)
    '''当第二个公共值是可变类型的时候 一定要注意 通过任何一个键修改都会影响所有'''
    # res = user_dict.setdefault('username','tony')
    # print(user_dict, res)  # 键存在则不修改 结果是键对应的值
    # res = user_dict.setdefault('age',123)
    # print(user_dict, res)  # 存不存在则新增键值对 结果是新增的值
    user_dict.popitem()  # 弹出键值对 后进先出

集合

1.类型转换
	set()
	集合内数据必须是不可变类型(整型 浮点型 字符串 元组)
 	集合内数据也是无序的 没有索引的概念
2.集合需要掌握的方法
	去重
 	关系运算
	ps:只有遇到上述两种需求的时候才应该考虑使用集合
3.去重
	 s1 = {11, 22, 11, 22, 22, 11, 222, 11, 22, 33, 22}
 	 l1 = [11, 22, 33, 22, 11, 22, 33, 22, 11, 22, 33, 22]
    s1 = set(l1)
    l1 = list(s1)
    print(l1)
 	'''集合的去重无法保留原先数据的排列顺序'''
4.关系运算
	群体之间做差异化校验
 	eg: 两个微信账户之间 有不同的好友 有相同的好友
 	 f1 = {'jason', 'tony', 'jerry', 'oscar'}  # 用户1的好友列表
    f2 = {'jack', 'jason', 'tom', 'tony'}  # 用户2的好友列表
    # 1.求两个人的共同好友
    # print(f1 & f2)  # {'jason', 'tony'}
    # 2.求用户1独有的好友
    # print(f1 - f2)  # {'jerry', 'oscar'}
    # 3.求两个人所有的好友
    # print(f1 | f2)  # {'jason', 'jack', 'tom', 'tony', 'oscar', 'jerry'}
    # 4.求两个人各自独有的好友
    # print(f1 ^ f2)  # {'oscar', 'tom', 'jack', 'jerry'}
    # 5.父集 子集
    print(f1 > f2)
    print(f1 < f2)

元祖

1.类型转换
	tuple()
 	ps:支持for循环的数据类型都可以转成元组
2.元组必须掌握的方法
	 t1 = (11, 22, 33, 44, 55, 66)
    # 1.索引取值
    # 2.切片操作
    # 3.间隔、方向
    # 4.统计元组内数据值的个数
    # print(len(t1))  # 6
    # 5.统计元组内某个数据值出现的次数
    # print(t1.count(11))
    # 6.统计元组内指定数据值的索引值
    # print(t1.index(22))
    # 7.元组内如果只有一个数据值那么逗号不能少
    # 8.元组内索引绑定的内存地址不能被修改(注意区分 可变与不可变)
    # 9.元组不能新增或删除数据

垃圾回收机制

"""
为了节省空间内存,减轻电脑压力,python有自带的垃圾回收机制自动管理
"""
1 引用计数
	name='wuyong' 数据值wuyong身上的引用计数为1
	name1 = name,此时引用计数为2
	del name1 引用计数减1 为1 
当数据值引用计数为0时,会被垃圾回收机制当做垃圾回收掉,不为0就不会被回收掉

2 标记清除
	主要针对循环引用问题
  	lt1 = [11,22] #引用计数 1
    lt2 = [33,44] #引用计数 1
		lt1.append(lt2) #引用计数 2
    lt2.append(lt1) #引用计数 2
    del 1t1 #断开变量名lt1与列表的绑定关系 引用计数为2-1=1
    de2 1t2 #断开变量名lt1与列表的绑定关系 引用计数为2-1=1
	当内存占用到一定临界值时,程序会自动停止 然后扫描程序中的所有数据
  并只给产生循环引用的数据打上标记 之后一次性清除
3 分代回收
	垃圾回收机制的频繁运行也会损耗各项资源
  根据引用计数增长的频率,频率高的,检测频率越低。(每次检测间隔时间越长)

循环and分支结构

while 条件:	
	条件成立之后执行的子代码(循环体代码)
1.先判断条件是否成立
2.如果成立则执行循环体代码
3.循环体代码执行完毕后再次回到条件判断处 判断条件是否成立
4.如果成立 则继续执行循环体代码
5.按照上述规律依次执行 直到条件不成立才会结束循环体代码的执行

# count = 1
# while count < 5:
#     print('hello world')
#     count += 1  # count = count + 1
# print('想不想干饭?')

break  # 强行结束循环体
	while循环体代码一旦执行到break会直接结束循环
continue  # 直接跳到条件判断处
	while循环体代码一旦执行到continue会结束本次循环 开始下一次循环
    
 
while 条件:
    循环体代码
else:
    循环体代码没有被强制结束的情况下 执行完毕就会执行else子代码


1.单if分支结构
	if 条件:
		条件成立之后才会执行的代码快
	ps:单if可以借助于流程图理解
 	 username = input('username>>>:')
	 if username == 'jason':
	     print('老师好')

2.if...else...分支结构
	if 条件:
     	条件成立之后执行的子代码
	else:
      	条件不成立执行的子代码
 	 username = input('username>>>:')
    if username == 'jason':
        print('老师好')
    else:
        print('去你妹的')

3.if...elif...else分支结构
	if 条件1:
       条件1成立之后执行的子代码
 	elif 条件2:
       条件1不成立 条件2成立执行的子代码
  	elif 条件3:
       条件1和2都不成立 条件3成立执行的子代码
   	else:
       上述条件都不成立 执行的子代码
 	ps:中间的elif可以写多个、上述子代码永远只会走一个
 	 score = input('请输入学生成绩>>>:')
    score = int(score)  # 将字符串的整数转换成整型的整数
    if score >= 90:
        print('优秀')
    elif score >= 80:
        print('良好')
    elif score >= 70:
        print('一般')
    elif score >= 60:
        print('及格')
    else:
        print('挂科 交钱重修')
 
4.if的嵌套使用(有点难)
	 age = 28
    height = 170
    weight = 110
    is_beautiful = True
    is_success = False
    username = 'tony'
    if username == 'tony':
        print('tony发现目标')
        if age < 30 and height > 160 and weight < 150 and is_beautiful:
            print('大妹纸 手机掏出来 让我加微信')
            if is_success:
                print('吃饭 看电影 天黑了...')
            else:
                print('去你妹的 流氓!!!')
        else:
            print('不好意思 认错人了')
    else:
        print('不是tony做不出来这件事')

posted @ 2022-10-04 15:26  虾仁猪心排骨汤  阅读(33)  评论(0编辑  收藏  举报