Python基础笔记
计算机基础:
Cpu(中央处理器):相当于人的大脑,用于计算。
内存:储存数据,4\8\16\32G,成本高,断电即消失。
硬盘:1T,固态(速度快)\机械硬盘,储存数据,长久保持的重要文件,小电影等等。
操作系统:
应用程序:
Python历史:
宏观上:Python2与Python3的区别:
1. Python2源码不标准,混乱,重复码太多,
2. Python3统一标准,取出重复码。
Python的环境:
编译型:一次性将所有程序编译成二进制文件。
优点:运行速度快。
缺点:开发效率低,不能跨平台。
使用语言:c,c++等。
解释型:当程序执行时,一行一行的解释。
优点:开发效率高,可以跨平台。
缺点:运行速度慢。
使用语言:python,php等。
Python的种类:
运行第一个py文件:
Python3x:Python 文件路径 回车。
Python2x:Python2 文件路径 回车。
宏观区别:Python2x源码,重复率高,不规范,默认编码方式是ASCII码。
解决方式:在文件的首行输入:#-*- encoding:utf-8 -*-解决python2中文报错。
Python3默认编码方式是utf-8。
-*- encoding:utf-8 -*- print('我爱中国')
Python中的变量:
定义:就是将一些运算的中间结果暂存到内存中,以便后续代码调用。
1 x=1+2+3+4 2 print(x) 3 print(x*5) 4 y=x*5 5 print(y+100-45+2) 6 7 print('泰哥泰哥,我是小弟') 8 print('泰哥泰哥,我是三弟小妹')
规范:1.必须由数字,字母,下划线任意组合,且不能数字开头。
2.不能是python当中的关键字。
[‘and’,’as’,’assert’,’break’,’class’,’continue’,’def’,’del’,’elif’,’else’,’except’,’exec’,’finally’,’for’,
’from’,’global’,’if’,’import’,’in’,’is’,’lambda’,’not’,’or’,’pass’,’print’,’raise’,’return’,’try’,’while’,’with’,’yield’]
3.变量具有可描述性。
4.不能是中文,对大小写敏感
5.可以多变量赋值。eg:a = b = c = 1或者a,b,c = 1,2.3,"abc"
6.可以使用del关键字删除对象。eg:del a
1 s=1234 2 12 #10r=3 3 w*e=4 4 #print=3 5 6 t-t = 2 7 3t_t = 23 8 *r = 4 9 _ = 'fdsa' 10 ___ = 4 11 %- = 'fdsa' 12 2w = 5 13 qwe-r = 'wer' 14 kfdsdlafhsdakfhdsakdfjkhsdakf = '太白' 15 print(名字) 16 AgeOfOldboy = 56 17 NumberOfStudents = 80 18 19 #下划线 20 age_of_oldboy = 56 21 number_of_students = 80
Python中的常量:
定义:一直不变的量,全部为大写字母。(BIR_OF_CHINA = 1949)
1 ge1 = 12 2 age2 = age1 3 age3 = age2 4 age2 = 100 5 age3 = 5 6 print(age1,age2,age3) #12, 100 ,100 7 #12,12,12, 8 #12,100,12 9 #100,100,100,
Python中的注释:
方便自己,方便他人理解代码。
单行注释:#
多行注释:’’’被注释内容’’’/””” 被注释内容”””。
用户交互:input
1.等待输入。
2.将你输入的内容赋值给前面变量。
3.Input出来的数据类型全部是str。
name = input('请输入你的名字:') age = input('请输入你的年龄:') print('我的名字是'+name,'我的年龄'+age+'岁')
函数:
def 函数名(参数列表):
函数体
1 eg1: 2 def hello(str): 3 print("hello:%S"%(str)) 4 hello("Tom") 5 6 eg2: 7 def function01(a,b): 8 return a + b 9 print(function01(3,4)) 10 11 eg3: 12 def function02(a = 0,b = 0): 13 return a * b 14 print(function02()) 15 print(function02(3)) 16 print(function02(5,9))
变量作用域:
L(local)局部作用域
E(Enclosing)闭包函数外的函数中
G(Global)全局作用域
B(Built-in)内建作用域
1 x = int(32) #内建作用域 2 g_a = 0 #全局作用域 3 def function03(): 4 0_3 = 1 #闭包函数外的函数中 5 def function04(): 6 i_b = 3 #局部作用域
模块:
模块是包含所有定义的函数和变量的文件,其后缀名是:.py
1 import sys 2 print(sys.path)
流程控制If循环:
1 #第一种: 2 if 4 > 5 : 3 print('我请你喝酒') 4 print('喝什么酒') 5 6 #第二种: 7 if 4 > 5: 8 print('我请你喝酒') 9 else: 10 print('喝什么酒') 11 12 #多选: 13 num = input('请输入您猜的数字:') 14 if num == '1': 15 print('一起抽烟') 16 elif num == '2': 17 print('一起喝酒') 18 elif num == '3': 19 print('新开了一家,走看看') 20 else: 21 print('你猜错了.....') 22 23 score = int(input("输入分数:")) 24 if score > 100: 25 print("我擦,最高分才100...") 26 elif score >= 90: 27 print("A") 28 elif score >= 60: 29 print("C") 30 elif score >= 80: 31 print("B") 32 elif score >= 40: 33 print("D") 34 else: 35 print("太笨了...E") 36 37 name = input('请输入名字:') 38 age = input('请输入年龄:') 39 if name == '小二': 40 if age == '18': 41 print(666) 42 else: 43 print(333) 44 else: 45 print('错了....')
流程控制while循环:
While 条件:
循环体
1 print('111') 2 while True: 3 print('我们不一样') 4 print('在人间') 5 print('痒') 6 print('222') 7 8 #从1--100 9 count = 1 10 flag = True 11 #标志位 12 while flag: 13 print(count) 14 count = count + 1 15 if count > 100 : 16 flag = False 17 18 count = 1 19 while count <= 100: 20 print(count) 21 count = count + 1 22 23 count = 1 24 sum = 0 25 while count <= 100: 26 sum = sum + count 27 count = count + 1 28 print(sum)
无限循环:
终止循环:1.改变条件,使其不成立。
2.break。
1 #break 2 print('11') 3 while True: 4 print('222') 5 print(333) 6 break 7 print(444) 8 print('abc') 9 10 count = 1 11 while True: 12 print(count) 13 count = count + 1 14 if count > 100:break 15 16 print(111) 17 count = 1 18 while count < 20 : 19 print(count) 20 continue 21 count = count + 1 22 23 count = 0 24 while count <= 100 : 25 count += 1 26 if count > 5 and count < 95: 27 continue 28 print("loop ", count) 29 print("-----out of while loop ------")
while else:
当while循环被break打断,就不会执行else的结果。
1 eg:1 2 count = 0 3 while count <= 5; 4 count += 1 5 if count == 3:break 6 print("Loop",count) 7 else: 8 print("循环正常执行完啦") 9 print("----out of while loop----") 10 11 eg:2 12 count = 0 13 while count <= 5; 14 count += 1 15 if count == 3:pass 16 print("Loop",count) 17 else: 18 print("循环正常执行完啦") 19 print("----out of while loop----")
continue:结束本次循环,继续下次循环。
for循环:
1 eg:1 2 s = 'fhdsklfds' 3 for i in s: 4 print(i) 5 6 eg:2 7 s = 'fdsa苍井空fdsalk' 8 if '苍井空' in s: 9 print('您的评论有敏感词...')
格式化输出%:
%占位符,s:字符串,d:digit 数字.
%%只是单纯的显示%.
1 #格式化输出: 2 # % s d 3 eg;1 4 name = input('请输入姓名') 5 age = input('请输入年龄') 6 height = input('请输入身高') 7 msg = "我叫%s,今年%s,身高%s" %(name,age,height) 8 print(msg) 9 10 eg:2 11 name = input('请输入姓名') 12 age = input('请输入年龄') 13 job = input('请输入工作') 14 hobbie = input('请输入爱好') 15 16 msg = '''----------info of %s----------- 17 Name : %s 18 Age : %d 19 Job : %s 20 Hobbie : %s 21 -------------end--------------''' %(name,name,int (age),job,hobbie) 22 print(msg)
1 name = input('请输入名字') 2 age = input('请输入年龄') 3 height = input('请输入身高') 4 msg = "我叫%s,今年%s,身高%s,学习进度3%%" %(name,age,height) 5 print(msg) 6 (想要早格式化输出中单纯的%,就再加一个%)
编码:
电脑的传输,还有储存的实际上都是0101010101
美国:ASCII码,为解决全球化文字问题,创建了一个万国码:unicode。
最开始:
1个字节:表示所有的英文,特殊字符,数字等等。
2个字节,16位表示一个中文,不够,unicode一个中文用4个字节表示,32位。
eg:你 00000000 00000000 00000000 00000100
升级版:utf-8,一个中文用3个字节表示。
gbk国内使用,一个中文用2个字节。
python2:
ascii码:A:00000010 8位 一个字节
unicode:A:00000000 00000001 00000010 00000100 32位 四个字节
中:00000000 00000001 00000010 00000110 32位 四个字节
utf-8:A:00100000 8位 一个字节
中:00000001 00000010 00000110 24位 三个字节
gbk:A:00000110 8位 一个字节
中:00000010 00000110 16位 两个字节
1.各个编码之间的二进制,是不能互相识别的,会产生乱码。
2.文件的存储、传输,不能是unicode(只能是utf-8、utf-6、gbk、gb2312、ASCII码等)
python3:
str 在内存中是用unicode编码。
bytes类型
对于英文:
str:表现形式:s = 'alex'
编码方式: 010101010 unicode
bytes:表现形式:s = b'alex'
编码方式: 000101010 utf-8 gbk。。。。
对于中文:
str:表现形式:s = '中国'
编码方式: 010101010 unicode
bytes:表现形式:s = b'x\e91\e91\e01\e21\e31\e32'
编码方式: 000101010 utf-8 gbk。。。。
1 eg:1 2 s = 'alex' 3 s1 = b'alex' 4 print(s,type(s)) 5 print(s1,type(s1)) 6 eg:2 7 s = '中国' 8 print(s,type(s)) 9 s1 = b'中国' 10 print(s1,type(s1)) 11 eg:3 12 s1 = 'alex' #encode 编码,如何将str --> bytes, () 13 s11 = s1.encode('utf-8') 14 s11 = s1.encode('gbk') 15 print(s11) 16 s2 = '中国' 17 s22 = s2.encode('utf-8') 18 s22 = s2.encode('gbk') 19 print(s22)
运算符:
赋值运算符:=、+=、-=、*=、/=、%=、**=、//=
逻辑运算符:&&、||、!
位运算符:&、|、^、~、<<、>>
成员运算符:in、not in
身份运算符:is、is not
1 #and or not 2 #优先级,()> not > and > or 3 # print(2 > 1 and 1 < 4) 4 # print(2 > 1 and 1 < 4 or 2 < 3 and 9 > 6 or 2 < 4 and 3 < 2) 5 6 # print(3>4 or 4<3 and 1==1) # F 7 # print(1 < 2 and 3 < 4 or 1>2) # T 8 # print(2 > 1 and 3 < 4 or 4 > 5 and 2 < 1) # T 9 # print(1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8) # F 10 # print(1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6) # F 11 # print(not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6) # F 12 13 #ps int ----> bool 非零转换成bool True 0 转换成bool 是False 14 # print(bool(2)) 15 # print(bool(-2)) 16 # print(bool(0)) 17 # #bool --->int 18 # print(int(True)) # 1 19 # print(int(False)) # 0 20 21 '''x or y x True,则返回x''' 22 # print(1 or 2) # 1 23 # print(3 or 2) # 3 24 # print(0 or 2) # 2 25 # print(0 or 100) # 100 26 # print(2 or 100 or 3 or 4) # 2 27 # print(0 or 4 and 3 or 2) #3 28 29 '''x and y x True,则返回y''' 30 # print(1 and 2) 31 # print(0 and 2) 32 print(2 or 1 < 3) #2 33 print(2 or 1 < 3 and 2) #2 34 print(3 > 1 or 2 and 2) #True 35 print(1 > 2 and 3 or 4 and 3 < 2) #False
数据类型分析:
int:1,2,3用于计算。
数字:int、float、bool、comlix(复数)
+、-、*、/、**(幂次方)、%(取余)
Ps:type( )函数用了查询变量所指类型
字符串转化成数字:int(str) 条件:str必须是数字组成的。
数字转化成字符串:str(int)
1 print(100,type(100)) 2 print('100',type('100'))
1 i = 2 2 print(i.bit_length()) 3 ''' 4 bit_length 5 1 0000 0001 1 6 2 0000 0010 2 7 3 0000 0011 2 8 '''
bool:True,False,用户判断。
1 1 print(True,type(True)) 2 2 print('True',type('True'))
1 #bool True False 2 3 #int ----> str 4 i = 1 5 s = str(i) 6 #str ---> int 7 s = '123' 8 i = int(s) 9 10 #int ---->bool:0为False,非0为True 11 i = 3 12 b = bool(i) 13 print(b) 14 #bool----> int 15 #True 1 16 #False 0 17 ''' 18 ps: 19 while True: 20 pass 21 while 1: 效率高 22 pass 23 ''' 24 25 #str --->bool 26 #s = "" -----> False 27 #非空字符串都是True 28 #s = "0" -----> True 29 s 30 if s: 31 print('你输入的为空,请重新输入') 32 else: 33 pass
str:存储少量数据,进行操作。
'fasda','二哥','24321','张三,李四,王五,赵六,······'
字符串:stràpython当中凡是使用引号引起的都是字符串,python中没有字符类型
可相加:字符串的拼接。
可相乘(与数字):str * int
字符串中插入其它字符串。eg:print(str1[:3] + "123" + str1[3:])
中括号用来截取字符串,下标从0开始
字符串格式化。eg:print('ABCDEFG%d' %(12345))
%d转义字符
1 print(1) 2 print("jsdfdsfsadl;fjdsal;j") 3 print("I'm a teacher") 4 5 a = '泰哥' 6 b = '小二' 7 c = a + b 8 print(c) 9 print('泰哥' + '小二' +'货') 10 print('坚强'*8) 11 12 msg = """ 13 今天我想写首小诗, 14 歌颂我的同桌, 15 你看他那乌黑的短发, 16 好像一只炸毛鸡。 17 """ 18 #print(msg)
1 #字符串的索引与切片 2 s = 'ABCDLSESRF' 3 #索引 4 #从前往后: 5 s1 = s[0] 6 print(s1) 7 s2 = s[2] 8 print(s2) 9 #从后往前: 10 s3 = s[-1] 11 print(s3) 12 s4 = s[-2] 13 print(s4) 14 #ABCD 切片 :顾头不顾尾 15 s5 = s[0:4] 16 print(s5) 17 s6 = s[0:-1] 18 print(s6) 19 s7 = s[:] 20 s8 = s[0:] 21 print(s7,s8) s7与s8相同 22 s9 = s[0:0] 23 #s[首:尾:步长] 24 s10 = s[0:5:2] 25 print(s10) 26 s11 = s[4:0:-1] 27 print(s11) 28 s12 = s[3::-1] 29 print(s12) 30 s13 = s[3::-2] 31 print(s13) 32 s14 = s[-1::-1] 33 print(s14) 34 s15 = s[::-1] 35 print(s15) 36 37 #字符串的操作 38 s = 'alexWUsir' 39 s1 = s.capitalize() # 首字母大写 40 print(s1) 41 # 全大写,全小写 42 s2 = s.upper() 43 s21 = s.lower() 44 print(s2,s21) 45 eg: 46 s_str= 'acEQ1' 47 you_input =input('请输入验证码,不区分大小写') 48 if s_str.upper() == you_input.upper(): 49 print('输入成功') 50 else: 51 print('请重新输入') 52 # 大小写翻转 53 s3 = s.swapcase() 54 print(s3) 55 # 每个隔开(特殊字符或者数字)的单词首字母大写 56 s = 'alex*egon-wusir' 57 s4 = s.title() 58 print(s4) 59 s = 'fade,crazy*w4rri0r_songsong node_3' 60 s4 = s.title() 61 print(s4) 62 #居中,空白填充 63 s = 'alexWUsir' 64 s5 = s.center(20,'~') 65 print(s5) 66 s = 'alex\tsir' 67 s6 = s.expandtabs() 68 print(s6) 69 #公共方法 70 s = 'alex二哥' 71 l = len(s) 72 print(l) 73 #以什么开头结尾 endswith 74 s = 'alexWUsir' 75 s7 =s.startswith('alex') 76 s71 = s.startswith('e',2,5) 77 print(s71) 78 ''' 79 if s7: 80 pass 81 elif s.startswith('bl'): 82 pass 83 print(s7) 84 ''' 85 # find:通过元素找索引,找到返回下标值,找不到返回-1。 86 # index:通过元素找索引,找到返回下标值,找不到报错。 87 s = 'alexWUsir' 88 s8 = s.find('A') 89 s81 = s.index('A') 90 print(s81,type(s8)) 91 #strip,rstrip,lstrip 92 s = 'alexWUsir%' 93 s9 = s.strip('%') 94 print(s9) 95 s = ' *a%lexWUsi* r%' 96 s91 = s.strip(' %*') 97 print(s91) 98 # strip:默认删除前后空格 99 username = input('请输入名字:').strip() 100 if username =='春哥': 101 print('恭喜春哥发财') 102 s = 'alexaa wusirl' 103 s10 = s.count('al') 104 print(s10) 105 # split str ---->list 106 s = ';alex;wusir;taibai' 107 l = s.split('a') 108 print(l) 109 # format的三种玩法,格式化输出 110 s = '我叫{},今年{},爱好{},再说一下我叫{}'.format('太白',36,'girl','太白') 111 print(s) 112 name = input('请输入名字:') 113 s = '我叫{0},今年{1},爱好{2},再说一下我叫{0}'.format(name,36,'girl') 114 print(s) 115 name = input('请输入名字:') 116 s = '我叫{name},今年{age},爱好{hobby},再说一下我叫{name}'.format(age=18,name=name,hobby='girl') 117 print(s) 118 # replace:替换 119 s = '来看待街坊邻居复合大师街坊法好的撒见客户' 120 s11 = s.replace('街坊','老王',1) 121 print(s11) 122 # is系列 123 name = 'jinxin123' 124 print(name.isalnum()) #字符串由字母或数字组成 125 print(name.isalpha()) #字符串只由字母组成 126 print(name.isdigit()) #字符串只由数字组成
list:储存大量的数据。
[1,2,3,'泰格','12353234',[1,2,3]]
元祖:只读(只能看,不能修改)。
(1,2,3,'第三方',)
dict:字典{'name':'云姐','age':16}
字典{'云姐':[],'二哥':[200,200,200,······]}
集合:{1,2,3,435,'reter'}
列表list:
列表相当于字符串,可存储不同数据类型,也可存储大量数据,且列表是有序的,有索引值,可切片,方便取值。
增 append insert extend
删 remove pop clear del
改 li[索引] = '被修改的内容' li[切片]:'被修改的内容'
查 for循环
range
1 eg:1 2 li = ['alex',[1,2,3],'wusir','egon','女神','taibai'] 3 l1 = li[0] 4 print(l1) 5 l2 = li[1] 6 print(l2) 7 l3 = li[0:3] 8 print(l3) 9 10 li = ['alex','wusir','egon','女神','taibai'] 11 #增 append、insert 12 eg:2 13 li.append('日天') 14 li.append(1) 15 print(li) 16 eg:3 17 while 1: 18 username = input('>>>') 19 if username.strip().upper() == 'Q': 20 break 21 else: 22 li.append(username) 23 print(li) 24 eg:4 25 li.insert(4,'春哥') 26 print(li) 27 eg:5 28 li.extend('二哥') 29 li.extend([1,2,3]) 30 print(li) 31 #删 32 eg:6 # 按索引去删除 33 name = li.pop(1) # 返回值 34 name = li.pop() # 默认删除最后一个 35 print(name,li) 36 eg:7 # 按元素去删除 37 li.remove('taibai') 38 print(li) 39 eg:8 # 清空 40 li.clear() 41 print(li) 42 eg:9 # 删除整个表 43 del li 44 print(li) # 结果报错(无列表,没有定义,所以报错) 45 eg:10 # 按切片去删除 46 del li[0:2] 47 print(li) 48 #改 49 eg:11 50 li[0] = '男兽' 51 li[0] = [1,2,3] 52 # 按切片去改 53 li[0:3] = '云姐plfdslkmgdfjglk' 54 print(li) # 结果分成最小元素 55 # 按索引去改 56 li[0:3] = [1,2,3,'春哥','咸鱼哥'] 57 print(li) 58 #查 59 eg:12 60 for i in li: 61 print(i) # 查表中的所有元素 62 print(li[0:2]) # 按切片查前两个元素 63 #公共方法: 64 eg:13 65 l = len(li) 66 print(l) 67 num = li.count('taibai') 68 print(num) 69 print(li.index('wusir')) 70 # 排序 71 li = [1,5,4,7,6,2,3] 72 eg:14 73 #正向排序 74 li.sort() 75 print(li) 76 #反向排序 77 li.sort(reverse=True) 78 print(li) 79 #反转 80 li.reverse() 81 print(li) 82 #列表的嵌套 83 li = ['taibai','武藤兰','苑昊',['alex','egon',89],23] 84 eg:15 85 print(li[1][1]) 86 name = li[0].capitalize() 87 li[0] = name 88 li[0] = li[0].capitalize() 89 eg:16 将‘苑昊’改为‘苑ritian’ 90 方法一: 91 li[2] = '苑日天' 92 print(li) 93 方法二: 94 print(li[2].replace('昊','ritian')) 95 li[2] = li[2].replace('昊','ritian') 96 eg:17 # 将alex改为大写 97 li[3][0] = li[3][0].upper() 98 print(li)
元祖tupe:
只读列表,数据可以被查询,但不能被修改,字符串的切片操作同样适用于元祖。
儿子不能更改,孙子可更改。
count() #元素出现次数
len() #长度
li.index('元素') #查找索引
sort(reverse = True) #倒叙排序
li.sort() #正序排序
print(li.sort())
reverse()反转
ps:
join: list ----->str
S.join(iterable)
li = [1,2,3]
s1 = str(li)
split str---->list
1 tu = (1,2,3,'alex',[2,3,4,'taibai'],'egon') 2 eg:1 3 #查 4 print(tu[3]) 5 print(tu[0:4]) # 切片查询 6 for i in tu: 7 print(i) 8 eg:2 9 #将‘taibai’改为大写 10 tu[4][3]=tu[4][3].upper() 11 print(tu) 12 eg:3 13 #在列表中‘taibai’之后添加‘sb’ 14 tu[4].append('sb') 15 print(tu) 16 eg:4 17 #join(可迭代对象) 18 s = 'alex' 19 s1 = '-'.join(s) 20 print(s1) 21 #列表转化成字符串 list -----> str join 22 #字符串转化成列表 str ----->list split() 23 li = ['taibai','alex','wusir','egon','女神',] 24 s = '++++'.join(li) 25 print(s) 26 eg:5 27 #range [1,2,3,4,5,6,.......100........] 28 按数字排列的顺序列表 29 从3开始: 30 for i in range(3,10): 31 print(i) 32 从0开始: 33 for i in range(10): 34 print(i) 35 步长: 36 for i in range(0,10,3): 37 print(i) 38 for i in range(10,0,-2): 39 print(i) 40 for i in range(0,10,-1): #结果不出,什么都没有,不会报错 41 print(i) 42 for i in range(10,-2): #结果不出,什么都没有,不会报错 43 print(i) 44 for i in range(10,-1,-2): 45 print(i) 46 eg:6 47 li = [1,2,3,5,'alex',[2,3,4,5,'taibai'],'afds'] 48 #循环打印列表: 49 for i in li: 50 if type(i) == list: 51 for k in i: 52 print(k) 53 else:print(i) 54 55 for i in range(len(li)): 56 if type(li[i]) == list: 57 for j in li[i]: 58 print(j) 59 else:print(li[i])
字典dict:唯一一个映射类型
数据类型划分:可变数据类型与不可变数据据类型
可变数据类型(不可哈西):list,dict,set
不可变数据类型(可哈西):元祖,bool值,int(数字),str(字符串)
字典的key(键)必须是不可变数据类型,可哈西,
value:任意数据类型。
优点:使用二分查找去查询
存储大量的关系型数据
特点:无序的(3.5版本(包括3.5)前都是无序的)
1 #字典建立 2 dic = { 3 'name':['大猛','小孟'], 4 'py9':[{'num':71,'avg_age':18,}, 5 {'num': 71, 'avg_age': 18, }, 6 {'num': 71, 'avg_age': 18, }, 7 ], 8 True:1, 9 (1,2,3):'wuyiyi', 10 2:'二哥', 11 } 12 print(dic) 13 14 dic1 = {'age': 18, 'name': 'jin', 'sex': 'male',} 15 #增:setdefault 16 eg:1 17 dic1['high'] = 185 #没有键值对,添加值 18 dic1['age'] = 16 #有键值对,则值覆盖 19 eg:2 20 setdefault #有键值对,不做任何改变,没有才添加 21 dic1.setdefault('weight') #无值时,默认为none 22 dic1.setdefault('weight',150) 23 dic1.setdefault('name','二哥') 24 print(dic1) 25 26 #删:pop、popitem、del、clear 27 eg:3 28 print(dic1.pop('age')) #有返回值,按键去删除 29 print(dic1.pop('二哥')) #无键时报错 30 print(dic1.pop('二哥',None)) #可设置返回值 31 print(dic1.popitem()) #随机删除,有返回值:元组里面是删除的键值。 32 del dic1['name'] #删除键值 33 print(dic1) 34 del dic1 #删除字典,结果报错,原因:字典被删除 35 print(dic1) 36 dic1.clear() #清空字典 37 38 #改:update 39 eg:4 40 dic1['age'] = 16 #键值覆盖 41 dic = {"name":"jin","age":18,"sex":"male"} 42 dic2 = {"name":"alex","weight":75} 43 dic2.update(dic) #将dic所有键值对更新到dic2中(更新覆盖) 44 print(dic) 45 print(dic2) 46 47 #查 48 eg:5 49 print(dic1.keys(),type(dic1.keys())) #结果内容:键 50 print(dic1.values()) #结果内容:值 51 print(dic1.items()) #结果内容:元祖(键,值),并不是键值对 52 for i in dic1: #设置变量i时,什么都不写,默认打印结果为键 53 print(i) 54 for i in dic1.keys(): #打印键 55 print(i) 56 for i in dic1.values(): #打印值 57 print(i) 58 for i in dic1.items(): #打印键值对 59 print(i) 60 61 eg:6 62 1)分别赋值: 63 a,b = 1,2 64 print(a,b) 65 2)使用一行代码转化a、b的值: 66 a = 1 67 b = 2 68 a,b = b,a 69 print(a,b) 70 3)最小单位一一对应,分别赋值: 71 a,b = [1,2],[2,3] 72 a,b = (1,2) 73 print(a,b) 74 for k,v in dic1.items(): 75 print(k,v) 76 77 eg:7 78 v1 = dic1['name'] 79 print(v1) 80 v2 = dic1['name1'] #无值时报错 81 print(v2) 82 print(dic1.get('name1')) #无值时返回none 83 print(dic1.get('name1','没有这个键')) #返回自定义的值
字典dict嵌套:
1 #字典建立 2 dic = { 3 'name':['alex','wusir','taibai'], 4 'py9':{ 5 'time':'1213', 6 'learn_money':19800, 7 'addr':'CBD', 8 }, 9 'age':21 10 } 11 dic['age'] = 56 #age改为56 12 print(dic['name']) 13 dic['name'].append('ritian') #列表中添加人名‘ritian’ 14 print(dic) 15 dic['name'][1] = dic['name'][1].upper() #将‘wusir’全部变为大写 16 print(dic) 17 female : 6 #给py9添加一个键值对:female : 6 18 dic['py9']['female'] = 6 19 print(dic) 20 21 # fhdklah123rfdj12fdjsl3 '123、12、13' 22 使用debugger运行处理: 23 info = input('>>>').strip() 24 for i in info: 25 if i.isalpha(): 26 info = info.replace(i," ") 27 l = info.split() 28 print(len(l))
小知识点汇总:
1.python2与python3的区别:
python2:
print可加括号,也可不加括号;有range(),也有xrange()[生成器];用户输入:raw_input()
python3:
print必须加括号;只有range();input()
1 python2 2 print() print 'abc'(可以加括号,也可不加) 3 range() xrange() 生成器 4 raw_input() 5 6 python3 7 print('abc')(必须加括号) 8 range() 9 input()
2.=:赋值; ==:比较值是否相等; is:比较(比较的是内存地址) id(内容)
1 eg:1 2 li1 = [1,2,3] 3 li2 = li1 4 print(li1 is li2) #结果为TRUE 5 eg:2 6 li1 = [1,2,3] 7 li2 = li1 8 li3 = li2 9 print(id(li1),id(li2)) #结果相同
3.数字,字符串:存在“小数据池”概念(为了节省空间)
数字的范围 -5 -- 256
字符串:1:不能有特殊字符
2:s*20 还是同一个地址,s*21以后都是两个地址
eg:1 i1 = 6 i2 = 6 print(id(i1),id(i2)) #结果相同 eg:2 i1 = 300 i2 = 300 print(id(i1),id(i2)) #结果不同
4.剩下的list、dict、tuple、set无“小数据池”概念
1 eg:1 2 l1 = [1,] 3 l2 = [1,] 4 print(l1 is l2) 5 eg:2 6 s = 'alex' 7 s1 = b'alex' 8 print(s,type(s)) 9 print(s1,type(s1)) 10 eg:3 11 s = '中国' 12 print(s,type(s)) 13 s1 = b'中国' 14 print(s1,type(s1))
集合及深浅copy:
集合:可变数据类型,但里面的元素必须是不可变的数据类型(),集合是无序的,不重复。
{}无键值对
set1 = set({1,2,3}) set2 = {1,2,3,[2,3],{'name':'alex'}} # 错的 print(set1) print(set2)
set1 = {'alex','wusir','ritian','egon','barry',} 增:add、update eg:1 set1.add('女神') print(set1) eg:2 set1.update('abc') print(set1) 删除:pop、remove、clear、del eg:1 set1.pop() # 随机删除 print(set1.pop()) # 有返回值 print(set1) eg:2 set1.remove('alex') # 按元素 print(set1) eg:3 {}:空字典 set():空集合 set1.clear() print(set1) eg:4 #删除整个集合 del set1 print(set1) 查:for i in for i in set1: print(i) 交集: set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} set3 = set1 & set2 print(set3) # {4, 5} print(set1.intersection(set2)) # {4, 5} 并集: set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7,8} print(set2.union(set1)) # {1, 2, 3, 4, 5, 6, 7} 反交集: set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 ^ set2) # {1, 2, 3, 6, 7, 8} print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8} 差集:set1独有的 set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 - set2) # {1, 2, 3} print(set1.difference(set2)) # {1, 2, 3} 子集与超集: set1 = {1,2,3,} set2 = {1,2,3,4,5,6} print(set1 < set2) print(set1.issubset(set2)) #这两个相同,都是说明set1是set2子集。 print(set2 > set1) print(set2.issuperset(set1)) #这两个相同,都是说明set2是set1超集。 去重: li = [1,2,33,33,2,1,4,5,6,6] set1 = set(li) print(set1) li = list(set1) print(li) s1 = {1,2,3} print(s1,type(s1)) frozenset不可变集合,让集合变成不可变数据类型: s = frozenset('barry') print(s,type(s)) for i in s: print(i)