1.集合:
集合是无序的,不重复的数据组合。
作用:1>去重:把一个列表变成集合,自动去重;
2>关系测试:测试两组数据之间的交集,差集,并集等。
创建新集合:
1 list = {1, 2, 3 ,4, 5} 2 print(list, type(list)) 3 #列表 4 list_1 = [1, 2, 3, 4] 5 list_1 = set(list_1) 6 print(list_1, type(list_1)) 7 #字典 8 list_2 = {1: 'one', 2: 'two'} 9 list_2 = set(list_2) 10 print(list_2, type(list_2)) 11 12 input: 13 {1, 2, 3, 4, 5} <class 'set'> 14 {1, 2, 3, 4} <class 'set'> 15 {1, 2} <class 'set'>
有关集合的方法:
1.1.集合运算
1 list_1 = {1, 3, 5, 6, 7} 2 list_2 = {1, 2, 3, 4, 5} 3 list_3 = {1, 3} 4 list_4 = {2, 4} 5 6 #交集 7 print(list_1.intersection(list_2)) {1, 3, 5} 8 print(list_2.intersection(list_1)) {1, 3, 5} 9 print(list_1 & list_2) {1, 3, 5} 10 11 #并集 12 print(list_1.union(list_2)) {1, 2, 3, 4, 5, 6, 7} 13 print(list_2.union(list_1)) {1, 2, 3, 4, 5, 6, 7} 14 print(list_1 | list_2) {1, 2, 3, 4, 5, 6, 7} 15 16 #差集 17 print(list_1.difference(list_2)) {6, 7} 18 print(list_2.difference(list_1)) {2, 4} 19 print(list_1 - list_2) {6, 7} 20 print(list_2 - list_1) {2, 4} 21 22 #判断子集 23 print(list_3.issubset(list_1)) True 24 print(list_3 <= list_1) True 25 26 #判断父集 27 print(list_1.issuperset(list_3)) True 28 print(list_1 >= list_3) True 29 30 #对称差集 31 print(list_1.symmetric_difference(list_2)) {2, 4, 6, 7} 32 print(list_1 ^ list_2) {2, 4, 6, 7} 33 34 #没有交集的时候返回True 35 print(list_1.isdisjoint(list_4)) True
1.2.其余操作
1 #浅copy 2 list_5 = list_1.copy() 3 print(list_5) 4 5 #添加 6 list_3.add(5) #只能添加一项 7 print(list_3) 8 list_4.update([0, 1, 9]) #添加多项 9 print(list_4) 10 11 #删除 12 list_3.pop() #任意删除 13 list_3.remove(1) #删除给定的任一项 14 list_3.discard(1) #删除给定的任一项 15 16 #长度 17 len(list_4)
对于x in [ ]或者x not in [ ],其中的[ ]可以是列表,集合,字典或者字符串。
2.文件读写详解
2.1. 文件的读出:其中 r-读写, w-创建新文件覆盖原有的, a-追加, r+ - 读写追加, w+ 写读, b-二进制文件
1 #直接读取 2 data = open('test', 'r', encoding='utf-8').read() 3 4 #创建句柄(文件句柄对文件进行操作,将在内存中打开的文件赋值) 5 f = open('test', 'r', encoding='utf-8') 6 data = f.read() 7 data2 = f.read() 8 print(data) 9 print('--------') 10 print(data2) #此处什么也读不到,因为读的第一遍光标在文件末尾 11 12 # readline 13 f = open('test', 'r', encoding='utf-8') 14 for i in range(2): #读取前两行 15 print(f.readline().strip()) #同时读取了每一行结尾的回车 16 17 #readlines 18 f = open('test', 'r', encoding='utf-8') 19 for line in f.readlines(): 20 print(line.strip()) 21 22 #第三行特殊打印,但这种方式只适用于小文件(直接从硬盘读到内存) 23 for index, line in enumerate(f.readlines()): 24 if index == 2: 25 print('********') 26 continue 27 print(line.strip()) 28 29 #一行一行的读取,内存中只保存一行(迭代器),这种方式效率很高 30 count = 0 31 for line in f: 32 count += 1 33 if count == 3: 34 print('********') 35 continue 36 print(line.strip())
2.2. 关于文件的方法
1 #一般文件先写到缓存,到达大小时才会写到硬盘 2 #f.flush()强制刷新 3 #这是一个简单的进度条程序 4 import sys,time 5 for i in range(20): 6 sys.stdout.write("#") #stdout标准输出(屏幕) 7 sys.stdout.flush() 8 time.sleep(0.3) 9 10 #怎么将光标返回去? 11 f = open('test', 'w', encoding='utf-8') 12 print(f.tell()) #打印文件光标的位置 13 print(f.readline().strip()) 14 print(f.readline().strip()) 15 print(f.tell()) 16 f.seek(0) #将光标移动到某地方 17 print(f.readline().strip()) 18 print(f.readline().strip()) 19 20 #文件的编码 21 print(f.encoding) 22 23 #Return the underlying file descriptor (an integer). 24 print(f.fileno()) 25 26 #是否是终端设备 27 print(f.isatty()) 28 29 #是否可移动 30 print(f.seekable()) 31 32 #是否可读 33 print(f.readable()) 34 35 #是否可写 36 print(f.writable()) 37 38 #判断是否关闭 39 print(f.closed) 40 41 #清空文件 42 f.truncate(0)
2.3. with open() as f:执行完后整个程序就关闭
2.4.文件的修改:
a. 在硬盘中直接修改会覆盖,所以全部加载到内存中修改,修改完成后写回文件;
b.修改后写到新文件(边读边修改边写)。
Because i love you. So i want to hold you. Because i love you. So there is nothing i can do. f = open('profile','r') f_new = open('rewrite', 'w') for line in f: if "Because i love you." in line: line = line.replace("Because i love you.", "Because you are my life.") f_new.write(line) f.close() f_new.close() Because you are my life. So i want to hold you. Because you are my life. So there is nothing i can do.
3.编码
暂略
4.全局变量与局部变量
不要在函数内部修改全局变量。(一般都不会这么干,我只是为了强调下一句)
只有字符串,数字简单的不能被修改,复杂的数据结构比如列表,字典,集合等皆可以被修改。
5.递归
递归特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层 栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
1 def mil(n): 2 print(n) 3 if int(n/2) > 0: 4 return mil(int(n/2)) 5 print('---',n) 6 mil(5) 7 8 5 9 2 10 1 11 --- 1
浙公网安备 33010602011771号