python之数据类型的内置方法(set、tuple、dict)与简单认识垃圾回收机制
字典的内置方法
类型转换
# dict()用于转换成字典
print(dict(name='tom', age=18)) # 输出结果:{'name': 'tom', 'age': 18}
字典取值
d1 = {
'name': 'jason',
'age': 18,
'hobbies': ['play game', 'basketball']
}
# 按key取值,这种方式最简单,但是如果找不到key所对应的值会报错,所以不推荐
print(d1['name']) # 输出结果:jason
print(d1['xxx']) # 报错
# 用get()方法,推荐使用
print(d1.get('name')) # 输出结果:jason
print(d1.get('xxx')) # 输出结果:None
# get()方法可以填两个变量,第一个填key,第二个填写如果key不存在则会返回的值
print(d1.get('xxx', '不存在')) # 输出结果:不存在
修改值
ps:字典是可变类型
# 直接用key索引直接赋值修改
d1 = {
'name': 'jason',
'age': 18,
'hobbies': ['play game', 'basketball']
}
d1['age'] = 20
print(d1['age']) # 输出结果:20
# 如果赋值时key不存在于字典内,则会新增值
d1['sex'] = 'boy'
print(d1) # 输出结果:{'name': 'jason', 'age': 20, 'hobbies': ['play game', 'basketball'], 'sex': 'boy'}
计算字典长度
# len()计算长度,有按照key的数量计算
d1 = {
'name': 'jason',
'age': 18,
'hobbies': ['play game', 'basketball']
}
print(len(d1)) # 输出结果:3
成员运算
# in 和 not in,只能判断key是否存在,不能判断value
d1 = {
'name': 'jason',
'age': 18,
'hobbies': ['play game', 'basketball']
}
print('name' in d1) # 输出结果:True
删除元素
d1 = {
'name': 'jason',
'age': 18,
'hobbies': ['play game', 'basketball']
}
# del通用方式
del d1['hobbies']
print(d1) # 输出结果:{'name': 'jason', 'age': 18}
# pop(),括号内要有key值
print(d1.pop('age')) # 输出结果:18
获取元素
d1 = {
'name': 'jason',
'age': 18,
'hobbies': ['play game', 'basketball']
}
# 以下方法获取到的值都可以看作列表
# 获取所有的key
for key in d1.keys():
print(key)
# 获取所有的value
for value in d1.values():
print(value)
# 获取所有的key:value
for item in d1.items():
print(item)
更新字典
# update() 可以同时更新字典中多个数据
d = {'k1': 'jason', 'k2': 'Tony', 'k3': 'JY'}
# key存在则修改 key不存在则新增
d.update({'k1':'tom', 'k4':'aaa'})
print(d) # 输出结果:{'k1': 'tom', 'k2': 'Tony', 'k3': 'JY', 'k4': 'aaa'}
快速生成字典
# fromkeys()可以快速生成字典,但key都会对应同一个value
d = dict.fromkeys(['k1', 'k2', 'k3'], [11])
print(d) # 输出结果:{'k1': [11], 'k2': [11], 'k3': [11]}
d['k1'].append(22)
print(d) # 输出结果:{'k1': [11, 22], 'k2': [11, 22], 'k3': [11, 22]}
setdefault()方法
# key不存在则新增key:value,并且返回是新增的value
d = {'k1': 111, 'k2': 222}
print(d.setdefault('k3', 333)) # 输出结果:333
print(d) # 输出结果:{'k1': 111, 'k2': 222, 'k3': 333}
# key存在,则返回对应的value,不做修改
d = {'k1': 111, 'k2': 222}
print(d.setdefault('k1', '嘿嘿嘿')) # 输出结果:111
print(d) # 输出结果:{'k1': 111, 'k2': 222}
元组的内置方法
类型转换
# tuple()和list()一样
# tuple()可以将除整型、浮点型、布尔值以外的类型转换成元组
print(tuple('jason')) # 输出结果:('j', 'a', 's', 'o', 'n')
print(tuple({'name': 'jason', 'pwd': 123})) # 输出结果:('name', 'pwd')
print(tuple((11, 22, 33, 44, 55))) # 输出结果:(11, 22, 33, 44, 55)
print(tuple({1, 2, 3, 4, 5})) # 输出结果:(1, 2, 3, 4, 5)
索引与切片操作
t = ('jason', 'tom', 123, 'abc')
# 索引取值
print(t[2]) # 输出结果:123
print(t[-1]) # 输出结果:abc
# 切片操作
print(t[1:3]) # 输出结果:('tom', 123)
print(t[-4:-2]) # 输出结果:('jason', 'tom')
# 切片操作之步长
print(t[::2]) # 输出结果:('jason', 123)
print(t[3:1:-1]) # 输出结果:('abc', 123)
统计长度
# len()用来统计长度
t = ('jason', 'tom', 123, 'abc')
print(len(t)) # 输出结果:4
成员运算
# 成员运算
t = ('jason', 'tom', 123, 'abc')
print('j' in t) # 输出结果:False
print('jason' in t) # 输出结果:True
统计某个元素出现的次数
# 统计出现次数使用count()
l = (1, 2, 1, 5, 1, 4, 6, 7, 1)
print(l.count(1)) # 输出结果:4
元组特性
# 当元组内只有一个值时,数据类型会是括号内的数据类型
t2 = (11)
print(type(t2)) # 输出结果:<class 'int'>
t2 = (11.11)
print(type(t2)) # 输出结果:<class 'float'>
t2 = ('jason')
print(type(t2)) # 输出结果:<class 'str'>
# 所以我们在定义时会在值的后面加一个逗号
t2 = (11,)
print(type(t2)) # 输出结果:<class 'tuple'>
t2 = (11.11,)
print(type(t2)) # 输出结果:<class 'tuple'>
t2 = ('jason',)
print(type(t2)) # 输出结果:<class 'tuple'>
# 无法修改元组内的字符串、整型、浮点型、布尔值
# 但可以修改元素为可变类型的值
tt = (11, 22, 33, [11, 22])
tt[-1][0] = 33
print(tt) # 输出结果:(11, 22, 33, [33, 22])
集合内置方法
集合的用处比起其他的数据类型较少,主要还是用于去重和关系运算
类型转换
# set()和list()一样
# set()可以将除整型、浮点型、布尔值以外的类型转换成集合
print(set('jason')) # 输出结果:{'o', 'n', 's', 'j', 'a'}
print(set({'name': 'jason', 'pwd': 123})) # 输出结果:{'name', 'pwd'}
print(set((11, 22, 33, 44, 55))) # 输出结果:{33, 11, 44, 22, 55}
print(set({1, 2, 3, 4, 5})) # 输出结果:{1, 2, 3, 4, 5}
集合去重
因为集合内不能出现重复的元素,自带去重特性,所以集合可以用于去重
# 自带去重
s = {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(s) # 输出结果:{1, 2, 3, 4}
# 列表去重
l = ['a', 'b', 1, 'a', 'a']
s = set(l)
l = list(s)
print(l) # 输出结果:['a', 1, 'b']
"""列表如果用转集合的方式去重,返回的值不会是列表原来的顺序"""
关系运算
# 判断两个群体内的差异,如:共同好友、共同关注、共同点赞
f1 = {'jason', 'kevin', 'tony', 'jerry'}
f2 = {'jason', 'tom', 'jerry', 'jack'}
# 查询共同元素
print(f1 & f2) # 输出结果:{'jason', 'jerry'}
# 查询f1中f2没有的元素
print(f1 - f2) # 输出结果:{'tony', 'kevin'}
# 查询f1和f2所有元素
print(f1 | f2) # 输出结果:{'jerry', 'kevin', 'jack', 'tom', 'tony', 'jason'}
# 查询各自的独立元素
print(f1 ^ f2) # 输出结果:{'jack', 'kevin', 'tom', 'tony'}
简单认识垃圾回收机制
前言
在有些其他的编程语言中,针对内存空间的操作都是需要程序员自己操作,而在python中,python底层针对空间的申请和释放都是设计好的,不需要程序员操心。
引用计数
在内存空间中,一个数据赋予一个变量时,这个数据身上的标记就会加1,这个标记就是引用计数,而python会清除引用计数为0的数据。
a = 'jason' # 'jason'引用计数+1
b = a # 'jason'引用计数+1
标记清除
当内存空间即将溢出(满了)的时候,python会自动启动应急机制,停止程序的运行,挨个检查值的引用计数并给计数为0的数据打上标记,然后一次性清理掉
分代回收
根据值存在的时间长短,将值划分为三个等级,存在时间越长,等级越高,等级越高检查间隔时间越长。
作业
- 去重列表元素并保留原来的顺序
l = ['a', 'b', 1, 'a', 'a']
- 去重下列数据字典并保留原来的顺序
l = [
{'name': 'lili', 'age': 18, 'sex': 'male'},
{'name': 'jack', 'age': 73, 'sex': 'male'},
{'name': 'tom', 'age': 20, 'sex': 'female'},
{'name': 'lili', 'age': 18, 'sex': 'male'},
{'name': 'lili', 'age': 18, 'sex': 'male'},
]
- 有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
pythons = {'jason', 'oscar', 'kevin', 'ricky', 'gangdan', 'biubiu'}
linuxs = {'oscar', 'tony', 'gangdan'}
'''
要求:
1. 求出即报名python又报名linux课程的学员名字集合
2. 求出所有报名的学生名字集合
3. 求出只报名python课程的学员名字
4. 求出没有同时这两门课程的学员名字集合
'''
答案
第一题
点击查看代码
l = ['a', 'b', 1, 'a', 'a']
# 用于存储新列表
final_list = []
# 遍历旧列表
for s in l:
# 如果新列表中没有这个值,则给新列表添加进去
if s not in final_list:
final_list.append(s)
print(final_list)
第二题
点击查看代码
l = [
{'name': 'lili', 'age': 18, 'sex': 'male'},
{'name': 'jack', 'age': 73, 'sex': 'male'},
{'name': 'tom', 'age': 20, 'sex': 'female'},
{'name': 'lili', 'age': 18, 'sex': 'male'},
{'name': 'lili', 'age': 18, 'sex': 'male'},
]
# 用于存储新列表
final_list = []
# 遍历旧列表
for s in l:
# 如果新列表中没有这个值,则给新列表添加进去
if s not in final_list:
final_list.append(s)
print(final_list)
第三题
点击查看代码
pythons = {'jason', 'oscar', 'kevin', 'ricky', 'gangdan', 'biubiu'}
linuxs = {'oscar', 'tony', 'gangdan'}
'''
要求:
1. 求出即报名python又报名linux课程的学员名字集合
2. 求出所有报名的学生名字集合
3. 求出只报名python课程的学员名字
4. 求出没有同时这两门课程的学员名字集合
'''
# 要求1
print("即报名python又报名linux课程的学员:{}".format((pythons & linuxs)))
# 要求2
print("所有报名的学生名字:{}".format((pythons | linuxs)))
# 要求3
print("只报名python课程的学员名字:{}".format((pythons - linuxs)))
# 要求4
print("没有同时这两门课程的学员名字集合:{}".format((pythons ^ linuxs)))
python之数据类型的内置方法(set、tuple、dict)与简单认识垃圾回收机制的更多相关文章
- python之数据类型的内置方法(str, list)
目录 字符串的内置方法 移除首尾指定字符 字母大小写相关操作 判断字符串的开头或结尾是否是指定字符 字符串特殊的输出方法 拼接字符串 替换指定字符 判断是否是纯数字 查找指定字符对应的索引值 文本位置 ...
- python 基本数据类型以及内置方法
一.数字类型 # 一.整型int # ======================================基本使用====================================== ...
- python 入门基础4 --数据类型及内置方法
今日目录: 零.解压赋值+for循环 一. 可变/不可变和有序/无序 二.基本数据类型及内置方法 1.整型 int 2.浮点型float 3.字符串类型 4.列表类型 三.后期补充内容 零.解压赋值+ ...
- day6 基本数据类型及内置方法
day6 基本数据类型及内置方法 一.10进制转其他进制 1. 十进制转二进制 print(bin(11)) #0b1011 2. 十进制转八进制 print(hex(11)) #0o13 3. 十进 ...
- while + else 使用,while死循环与while的嵌套,for循环基本使用,range关键字,for的循环补充(break、continue、else) ,for循环的嵌套,基本数据类型及内置方法
今日内容 内容概要 while + else 使用 while死循环与while的嵌套 for循环基本使用 range关键字 for的循环补充(break.continue.else) for循环的嵌 ...
- python今日分享(内置方法)
目录 一.习题详解 二.数据类型的内置方法理论 三.整型相关操作 四.浮点型相关操作 五.字符串相关操作 六.列表相关操作 今日详解 一.习题详解 1.计算1-100所有数据之和 all_num = ...
- Day 07 数据类型的内置方法[列表,元组,字典,集合]
数据类型的内置方法 一:列表类型[list] 1.用途:多个爱好,多个名字,多个装备等等 2.定义:[]内以逗号分隔多个元素,可以是任意类型的值 3.存在一个值/多个值:多个值 4.有序or无序:有序 ...
- if循环&数据类型的内置方法(上)
目录 if循环&数据类型的内置方法 for循环 range关键字 for+break for+continue for+else for循环的嵌套使用 数据类型的内置方法 if循环&数 ...
- wlile、 for循环和基本数据类型及内置方法
while + else 1.while与else连用 当while没有被关键字break主动结束的情况下 正常结束循环体代码之后执行else的子代码 """ while ...
随机推荐
- the compatibility problem of ie
ie8hack ie8下的兼容问题处理:背景透明,css3圆角,css3和jquery支持部分css3选择器(例如:nth-child),支持html5的语义化标签,媒体查询@media等. 在htm ...
- 饿了么组件库element-ui正则表达式验证表单,后端验证表单。
前言 老是遇到一些朋友问一些element-ui组件使用相关的基础问题,因为官方文档上并没有提供所有琐碎的功能代码demo.从这里开始我会根据我实际遇到的问题记录一些常见的官方文档没有详述的功能代码, ...
- IDEA安装配置Scala环境
这里有详细步骤:windows上 IntelliJ IDEA安装scala环境 详细 初学
- vue和react给我的感受
以下纯属个人使用两个框架的感想和体会: 不知道你们是否有这种感觉~ 我vue和react都用过一段时间,但是vue给我感觉就是经常会忘记语法,需要对照文档才知道怎么写( 难不成是我没喝六个核桃的原因吗 ...
- vue后台管理系统组件弹窗
//addFormVisibleIcon可在data中设置true与falsehttps://element.eleme.io/#/zh-CN/component/installation <e ...
- smdms超市订单管理系统之登录功能
一.超市订单管理系统准备阶段 Supermarket order management system 创建数据库 数据库代码放置如下 点击查看数据库address代码 CREATE TABLE `sm ...
- Quartz 使用记录
Quartz 使用记录 官网 https://www.quartz-scheduler.org/ 参考文档 Quartz 2.3.0 什么是 Quartz? 官方描述: Quartz is a ric ...
- 帝国CMS实现栏目批量修改:是否生成
帝国cms实现栏目批量修改 是否生成:不生成栏目页, 不生成内容页, 不生成JS调用, 标签不调用的修改方本文关键字词:栏目批量设置第一步./e/admin/SetMoreClass.php中查找: ...
- 在Vue3项目中使用pinia代替Vuex进行数据存储
pinia是一个vue的状态存储库,你可以使用它来存储.共享一些跨组件或者页面的数据,使用起来和vuex非常类似.pina相对Vuex来说,更好的ts支持和代码自动补全功能.本篇随笔介绍pinia的基 ...
- Python 读取UCI iris数据集分析、numpy基础学习
python基础.numpy使用.io读取数据集.数据处理转换与简单分析.读取UCI iris数据集中鸢尾花的萼片.花瓣长度数据,进行数据清理,去重,排序,并求出和.累积和.均值.标准差.方差.最大值 ...