从零开始的python之路-Python基础(三)
一、字典
帮助用户去表示一个事物的信息(有多个属性的事物)
基本格式:
dict{"key":value}
1、独有功能
dict.keys #获取字典中所有的键 dict.values #获取字典中所有的值 dict.items #获取字典中所有的键值对 dict.get #根据键获取字典中的值,若不存在,则返回None dict.pop #根据键删除字典中的值,且可以获取到相应的值。 dict.update #更新一个字典,若想更新的键不存在,则添加。若存在,则更新。
2、公共功能
len #获取长度 索引 #根据键获取值,注意不是获取位置,而是键。 for循环 修改 #字典中存在则修改,没有则增加。 删除 #del
3、判断一个值是否在字典中
运用 if.... in.....: 进行判断时,判断的是键,而不是值。
判断值的方法:
li={'k1':'v1','k2':'v2','k3':'v3'}
方式1:循环判断
flag="不存在"
for i in li.values() :
if "v1" in i :
flag = "存在"
print(flag)
方式二:转换为列表,在判断。
if "v1" in list(li.values()) :
print("存在")
二、集合
集合与列表相似,但是集合是无序且不可重复的。
1、基本格式:
set={1,2}
2、空集合的表达
空集合:set() 补充:对于任意一种数据类型,都可以用数据类型+()来表示空 例如: str() 等价于 "" list() 等价于 [] int() 等价于 0
3、集合独有功能
1、set.add() :#向集合中添加值。 2、set.discard() : #向集合中删除一个值 3、set.update() : #把对应列表更新,把一个列表或集合中所有的值加到对应列表中。 4、set.intersection() : #一个列表与另一列表的交集 5、set.union() : #一个列表与另一列表的并集。 6、set.difference(set1) : #一个列表与另一列表的差集,获取set中有,而set1中没有的。 7、set.symmetric_difference() : #相互取差集
4、集合公共功能
1、len
#求长度
2、for循环
5、嵌套问题
列表/字典/集合不能放在集合中,同时也不能作为字典的键 hash:内部会将值进行哈希算法并得到一个数值(对应内存地址),以后用于快速查找。
三、内存
可以使用 id() 来查看内存地址。
1、当创建不同的变量时,它们所在的内存地址是不一样的,即使它们的值是相同的。例如:
v1="wwf" v2="wwf" v1=123 v2=123 #以上的变量的内存地址是不同的。可以通过下面的方式使它们内存相同。 v1=123 v2=v1 #在python中,有特殊例子,会使创建不同的变量时任使它们内存相同,因为python有一定的记录机制: 1. 整型: -5 ~ 256 2. 字符串:"wwf" * 3 - 重新开辟内存。
2、对于列表/字典/集合来说,当你在内部对其进行修改时,不会改变其内存地址。而当你对其进行重新赋值时,则会改变其内存地址,例如:
v1 = [11,22,33] v2 = v1 v1.append(44) print(v2) # 含 44 v1 = [11,22,33] v2 = v1 v1 = [1,2,3,4] print(v2) #v2=[11,22,33],而不是[1,2,3,4]
补充:== 与 is的区别:
== 用于比较值是否相等,而is用于比较内存地址是否相等。
四、深浅拷贝
拷贝:复制拷贝的内容,并重新开辟内存进行存储,即内存地址发生改变。
1、深浅拷贝基本格式:
首先:import copy 浅拷贝:copy.copy() 深拷贝:copy.deepcopy()
2、对于不可变类型(字符串/整形/元组)
深浅拷贝并无区别,都是对其进行复制,并重新开辟内存进行存储。
对于元组。有特殊情况。 v1 = (1,2,3,[1,2,3],4) import copy v2 = copy.copy(v1) print(id(v1),id(v2)) v3 = copy.deepcopy(v1) print(id(v1),id(v3)) 在上面代码中,当元组中含有可变类型时,浅拷贝时地址不发生改变,可以理解为不拷贝。 而深拷贝时,地址发生改变,即发生拷贝。
3、对于不可变类型(列表/字典/集合)
浅拷贝:只拷贝第一层。把会拷贝的内容重新开辟内存进行存储。
深拷贝:拷贝包括嵌套中的所有可变类型。把会拷贝的内容重新开辟内存进行存储。
例子: 1、 import copy v1 = '123' v2 = copy.copy(v1) print(id(v1),id(v2)) #在这里,按常理来说v1与v2的地址不同,但由于小数据池的原因,地址会相同。 2、import copy v1 = [1,2,3,4,[11,22,33]] v2 = copy.copy(v1) print(id(v1),id(v2)) print(id(v1[4]),id(v2[4])) #由于浅拷贝,只会拷贝第一层,所以第一次地址不同,而第二次由于不会拷贝,所以地址相同。 v2 = copy.deepcopy(v1) print(id(v1),id(v2)) print(id(v1[4]),id(v2[4])) #而对深拷贝而言,会把所有嵌套都拷贝,所以两次地址都会不同。
五、文件操作
1、文件操作基本格式
变量名=open(文件名,mode="",encoding="") 变量名.close() #要记得关闭,相当于保存到文件中。
2、文件打开方式
1、打开方式:r 只能读,不能写,如果文件不存在则会报错。 读取方式:file_object.read() 2、打开方式: w 只能写入,不能读取,且每次打开时都会清空文件。如果文件不存在,则会创建。 写入方式:file_object.write() 3、打开方式:a 只能追加,不能读取。如果文件不存在,则会创建. 追加方式:file_object.write() 4、打开方式:r+ 可以读可以写,写入时根据光标的位置,从当前光标位置开始进行写入操作(可能会将其他的文字覆盖)。可以通过file_object.seek()来调整光标位置。注意:光标调整根据字节调整,例如一个中文在utf-8中是3字节。r+中光标默认在最后,因为读取时从第一读取到最后时,光标在最后。 5、打开方式:w+ 可以读可以写。写入时会把文件清空,读取时会从当前光标开始读取。 6、打开方式:a+ 可以读可以写。通过光标调整读取位置,但写入时总会在最后加
3、文件读写-功能
1、从当前光标所在的位置向后读取文件规定数量的字符 data = file_object.read() 2、读取文件的所有内容到内存,并按照每一行进行分割到列表中。(如果文件较大,会占用较多内存) data_list = file_object.readlines() print(data_list) 3、如果以后读取一个特别大的文件,可以: for line in file_object: line = line.strip() print(line)
浙公网安备 33010602011771号