本周总结
1.列表
2.字典
3.集合
4.元组
5.分支结构和循环结构
6.垃圾回收机制
1.列表
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)
2.字典
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() # 弹出键值对 后进先出
3.集合
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)
4.元组
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.元组不能新增或删除数据
5.分支结构和循环结构
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做不出来这件事')
6.垃圾回收机制
为了节省空间内存,减轻电脑压力,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 分代回收
垃圾回收机制的频繁运行也会损耗各项资源
根据引用计数增长的频率,频率高的,检测频率越低。(每次检测间隔时间越长)
标签:总结,username,res,学习,dict,user,l1,print
From: https://www.cnblogs.com/yueq43/p/16757409.html