python基础之八:知识小结及补充
一、python2 与python3 的区别
1、在2中print后可带扣号,也可不带,3中必须带,否则报错!
#print 'hello python2' print('hello python3')
2、在2中有xrange()生成器,也有range(),而3中只有range()
for i in range(1, 10, 2): print(i)
3、python2中,raw_input()把输入的都当作字符串,而input()输入什么类型就是什么类型-->int类型的时候最好用input()
python3将raw_input和input进行整合成了input....去除了raw_input()函数....其接受任意输入, 将所有输入默认为字符串处理,
并返回字符串类型
input('python3 输入的任何字符都会被视为字符串!')
二、“=”,“==”与“is”的区别 id(内容) ->查看内容的内存地址
“=” 赋值
“==”比较值是否相等
“is”比较的是内存地址是否相同
li1 = [1, 2, 3] li2 = li1 print(li1 == li2) print(li1 is li2) print(id(li1), id(li2))
三、python中的小数据池 (为节约空间,将小段数据只保存一份在内存中)
只有字符串、数字在该池中;
数字的范围是:-5 -- 256 在池中
字符串:1)不能含特殊字符
2)S*20 还是同一内存地址,S*21以后就是两个内存地址了(S表示单个英文字符) --> 实际测试不准,如100个a,内存地址却相同
1 s1 = 'abcd中' 2 s2 = 'abcd中' 3 print(id(s1), id(s2)) # 此环境下是相同的,windows命令行下是False 4 5 n1, n2 = 6, 6 6 print(n1 is n2) 7 n3, n4 = 300, 300 8 print(n3 is n4) # 在此环境下是True,在window10 命令行下如此写也是True 9 n5 = 300 10 n6 = 300 11 print(n5 is n6) # 在此环境下是True,在window10 命令行下如此却是False
其他数据类型如:list、dict、tuple、set不包含在小数据池中
tu1 = ("1", 2) tu2 = ("1", 2) print(tu1 is tu2) # 输出False
四、基本数据类型知识小结
到目前为止,接触到的基本数据类型有:
int、str、list、bool、tuple、dict、bytes
1 1、int 2 # int.bit_length() 3 # int.to_bytes() 4 # int.from_bytes() 5 # int.mro() 6 7 # 2、str 8 #str.isspace() 9 10 # 3、list 11 ''' 12 补充一个循环列表,删除元素时越界的问题:在列表循环过程中删除列表中的元素(避免) 13 ''' 14 # 越界的示例:删除过程中,列表在改变 15 # for i in range(len(li)): 16 # if(i%2 == 1): 17 # li.pop(i) 18 19 li = [11, 22, 33, 44, 55] 20 21 # 需求,循环上述列表li,删除奇数数位的值 22 # 普通方法 23 li_odds = li[1::2] 24 for i in li_odds: 25 li.remove(i) 26 print(li) 27 # 高级方法 28 for i in range(len(li)-1, -1, -1): # range(start, stop[, step]) 即顾头不顾尾:从4开始到-1,即4,3,2,1,0,步长是-1,因为是倒着数 29 print(i) 30 if i % 2 == 1: 31 del(li[i]) 32 print(li) 33 34 for i in range(5, 0, -1): # 倒数5到0,没有0,所以是:5,4,3,2,1 35 print(i) 36 37 # 4、bool 38 # 转化成bool值 39 # 各种可转换成False的 : 0 '' [] () {} set() 40 print(bool(0), bool(''), bool([]), bool(()), bool({}), bool(set())) 41 42 43 # 5、tuple 元祖 44 tu1 = (1) # 如果元祖里面只有一个元素且不加,那此元素是什么类型,就是什么类型。 45 tu2 = (1,) 46 print(type(tu1), type(tu2)) # 打印结果:<class 'int'> <class 'tuple'> 47 48 tu3 = ([1]) 49 tu4 = ([1],) 50 print(type(tu3), type(tu4)) # 打印结果:<class 'list'> <class 'tuple'> 51 52 l1 = [] 53 l2 = l1 54 l3 = l1 55 l3.append('a') 56 print(l1, l2, l3) # ['a'] ['a'] ['a'] 57 58 59 dic1 = dict.fromkeys([1, 2, 3], 4) 60 print(dic1) # 结果是:{1: 4, 2: 4, 3: 4} 61 print(dic1[1]) # 结果肯定是4 62 63 # 6、dict 64 65 dic = dict.fromkeys([1, 2, 3], '春哥') 66 print(dic) 67 dic = dict.fromkeys([1, 2, 3], []) 68 print(dic) # {1: [], 2: [], 3: []} 69 dic[1].append('袁姐') 70 print(dic) # {1: ['袁姐'], 2: ['袁姐'], 3: ['袁姐']} 71 dic[2].extend('二哥') # extend用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。 72 print(dic) # {1: ['袁姐', '二', '哥'], 2: ['袁姐', '二', '哥'], 3: ['袁姐', '二', '哥']} 73 74 dic2 = dict.fromkeys([1, 2, 3], [1]) 75 dic2[1].append('东西') # 添加到一个value列表,结果都添加了 76 print(dic2) 77 78 # # # # 删除keys中不包含k字母的字典元素############# 79 # # 原则是,集合在循环中不能删除自己的元素,即集合自带的删除方法不要使用,用系统给的del() 80 # 方法一: 81 dic4 = {'k1': 'v1', 'k2': 'v2', 'a3': 'v3'} 82 dic5 = {} 83 84 for i in dic4: 85 if 'k' not in i: # 字符串的成员运算符 - 如果字符串中不包含给定的字符返回 True 86 dic5.setdefault(i, dic4[i]) 87 # 完成上述循环后,dic5 = {'a3': 'v3'} 88 dic4 = dic5 # 将dic5的值赋给dic4,覆盖原来的值 89 print(dic4) # {'a3': 'v3'} 90 91 # 方法二: 92 li_tmp = [] 93 for j in dic4: 94 if 'k' not in i: 95 li_tmp.append(j) 96 for k in range(len(li_tmp) - 1, -1, -1): 97 del(dic4[k]) 98 print(dic4) 99 100 # 简化版本 101 l = [] 102 for i in dic4: 103 if 'k' in i: 104 l.append(i) 105 for i in l: 106 del dic4[i] 107 print(dic4)

浙公网安备 33010602011771号