Python【day 15-2】基本数据类型-dict tuple set
'''''' ''' 变量的数据类型 int str bool list 5、字典 dict 定义和写法:由{}表示,每个元素是key:value的键值对形式,元素间是逗号隔开 特点: 1、key是可哈希的-不可变类型(比如:int str tuple bool) value的类型是不限制的,可以存放任意数据类型 2、字典是无序的,没有索引和切片 常见操作: 增 1、dic[key] = value #单个键值对添加,先建立一个空字典 2、dic = {k1:v1,k2:v2} #一次添加多个键值对-字典的定义 3、ret= dic.setdefault(key,value) #如果key已经存在,不会覆盖 #添加键值对,返回添加的value 4、dic2 = dic.fromkeys(iterable,value) #iterable中每个元素共用一个value dic2 = dict.fromkeys(iterable,value) #类方法 #注意点1:会新产生一个新字典,原字典本身不会改变 #注意点2:fromkeys是一个类方法 删 1、pop 参数是key,删除key对应的元素-键值对,并且获取被删除元素的value 2、popitem 参数是空,随机删除一个元素-键值对,并且获取被删除元素-键值对 注意:从表面看,是删除了字典的最后一个键值对,但是字典的key是无序的,所有还是随机的 3、del 1、参数是key,删除key对应的元素-键值对 2、还可以直接删除整个字典,回收内存空间 4、clear 清空字典的元素-键值对,变成空字典 改 1 dic[key] = 新value 根据key获取到字典的value,对value进行重新赋值 2 update dic1.update(dic2) 把字典2的元素依次添加到字典1 注意:如果字典2的key和字典1的key有相同的,会出现value的覆盖 查-取值 ''' ''' 1 dic[key] 根据自定的key取value值,如果key不存在,就报错 2 get 写法:字典.get(key[,value]) 参数1是key,参数2是默认返回值(不写默认是None) 1、如果key存在,就返回字典中key对应的value 2、如果key不存在,不会报错,会返回参数2(参数2不写默认是None) 这一点上,健壮性强于dic[key]来取值 3 setdefault 添加元素,并取值元素的value(key如果已经存在,不会覆盖) 写法:字典对象.setdefault(key1,value1) 参数1是新增加元素的key,参数2是新增加元素-键值对的value 1、将参数1和参数2作为新元素-键值对添加到字典对象 原字典对象添加了一个新元素-键值对 2、返回者是参数2,即获取新增加的value作为返回值-这个返回value1就是取值 (和pop的删除并返回被删除值有类似之处, setdefault是添加并返回添加的value) 3、如果key1已经在原字典对象中存在了,新的键值对将无法添加,原字典对象保持不变 这里不会覆盖原字典对象的value 注意点:不会覆盖这个点和dic[key]=value,如果key已经存在,会覆盖,是不同的 字典for循环: 1、iterable dic1 dic1.keys() dic1.values() 2、for i in dic1: print(i,dic1[i]) for i in dic1.keys(): print(i,dic1[i]) #用的比较少 for i in dic.values(): print(i) #适用场景:比如求value的平均值 for i in dic1.items(): print(i) #这里返回是列表,列表的元素是键值对元组 (k1,v1) for k,v in dic1.items(): print(k,v) 6 元组--tuple 1、元组是只读的,不可变 不可变的是元组的第一层 如果元组的元素是列表,列表是可以添加删除元素的 2、操作方法比较的少 count() index() len() 3、iterable-可迭代的 支持for循环 (for循环的取值速度:dict>set>list>tuple) 4、元组是没有元组推导式的 7 集合-set 1、集合的概念:只有key的字典 2、特点: 无序 去重 元素是不可变的(可哈希的)--因为字典的key是不可变的 3、支持for循环,iterable 4、可冻结的集合 frozen 特点:frozen本身是不可变的(可哈希) 5、操作 两个集合之间可以& | - (交集&、并集|、差集)等 6、备注: set不能作为字典的key frozetkey作为字典的key '''
''''' ''' 一、条件判断、循环 1 条件判断if if 条件: 代码块(语句块) elif 条件: 代码块 elif 条件: 代码块 。。。 else: 代码块 2 循环 1 while循环(条件循环) while 条件: 循环体 break (结束整个循环-本层,如果是2层循环,只能跳出1层,不能跳出2层) continue(结束本次循环-迭代,继续执行下一次循环) else: pass #当上面的while正常结束后(条件是False的时候,没有出现break),才执行这个语句 2for循环--主要用于循环遍历取值 3 print print(message,end='\n',sep=' ') 参数1:打印输出的信息 参数2:行结束符,不写默认是换行 \n 参数3:分隔符,不写默认是空格 注意点:打印2个及以上元素,才会用到分隔符,打印一个元素,是用不到分隔符的 4 input 用户交互 5 range range(start,end,step) --range和切片的区别,分隔符不同,前者是逗号,后者是冒号 #step不写,默认是1 切片:li1(start:end:step) 6 文件路径的分隔符 win \ 反斜杠-捺杠 \还表示转义 \t \r \n linux / 顺斜杠-撇杠 二、运算符 1、算数运算符 + - * / // % ** 2、比较运算符 > >= < <= == != 3、逻辑运算符 and-与 两个同时为真,结果才是真 or-或 两个中有一个是真,结果就是真 not-非 非假即真 非真即假 优先级顺序: 小括号() >not > and >or a and b 如果a不是0,返回b 如果a是0,返回a a or b 如果a不是0,返回a 如果a是0,返回b 4、赋值运算符 += -= *= /= %= a+=b 等价于 a = a+b 5、成员运算符 x in xx 比如:判断列表或者字典的元素 6、is和== is比较的是内存地址 ==比较的是值 小数据池:int str bool这三种类型的对象创建之后,符合规则的,会被缓存到小数据池 下次直接从小数据池中调用,从而节省内存 比如:a1='jack' a2='jack' 在创建变量a1的时候,会新开辟一个内存空间,这个内存空间的名字是a1,里面的值存的是'jack' 且把这个内存空间缓存到小数据池子中 在创建变量a2的时候,不会新开辟另外一个内存空间,而是把a2指向'jack'所在的内存地址 即a1和a2的内存地址是一样的 7、文件操作 open(文件路径,mode='模式',encode='编码') 模式: r w a r+ w+ a+ rb wb ab for循环可以迭代文件句柄,拿到的是一行一行的内容 seek(0,0) #光标移到文件开头 参数1是偏移量 参数2中:0表示文件开头,1表示文件当前位置,2表示文件末尾 seek(0,2) #光标移到文件末尾 seek(0,1) #光标移到当前位置 tell() #打印光标的当前位置 with open(文件路径,mode='模式',encode='编码') as f: pass #不需要flush和close 文件修改: 打开源文件,从源文件中读取内容到内存,修改,然后将内容写入到新文件。 删除源文件,把新文件重命名成源文件的名字