?
python其他知識目錄
?
1、三元運算(三目運算)
三元運算符就是在賦值變量的時候,可以直接加判斷,然后賦值
格式:[on_true] if [expression] else [on_false]
res = 值1 if 條件 else 值2
其他語言類似結構:
判段的條件?條件為真時的結果:條件為假時的結果
賦值一個變量,不滿足某個條件就重新賦予另一個值一行代替四行,簡化代碼
a = 1 b = 2 #變量值是...,如果不滿足那么值是....。 h = "" h = "變量1" if a>b else "變量2" #可以設置默認設置真,不滿足某個條件就等于假;可以默認設置通過,不滿足某個條件就不通過,$與shell的那個判斷相似,有時間增加一下 print(h) ------------結果: 變量2a = 1 #判斷是否為最大值 b = 2 c = 3 max = a if a>b and a>c else "a不是最大值" print(max) -----------結果: a不是最大值a = 1 #和上面的對比,也可以不用變量來接收的打印 b = 2 c = 3 print( a if a>b and a>c else "a不是最大值") -----------結果: a不是最大值a = 7 #求三個數最大值 b = 6 c = 5 print((a if (a > b) else b) if ((a if (a > b) else b) > c) else c) -------------結果: 7a = 7 b = 6 c = 5 #print((a if (a > b) else b) if ((a if (a > b) else b) > c) else c) # (a if (a > b) else b) (a if (a > b) else b) d = (a if (a > b) else b) print(d if (d>c) else c) ----------------結果: 7mcw = [i for i in range(1,11) if i%2==0 ] #三元運算和列表。將1-10之間的偶數追加到列表 print(mcw) ---------------結果: [2, 4, 6, 8, 10]
#自我解析:某個事物有兩種變化的時候使用,不滿足某個條件就是選第二種變化。舉例子比如:開關的開
和關;奇數是+號,偶數是-號求和;真和假的判斷;作為一個旗幟等等。
#最終簡化:賦值一個變量,不滿足某個條件就重新賦予另一個值
?2、實現一行打印代碼的原理(精簡代碼)
2.1基本原理:
li=["小","馬","過","河"] print([i for i in li]) ------------------結果: ['小', '馬', '過', '河']
li=["小","馬","過","河"]
print([i+"*" for i in li]) #一行代碼實現列表循環。i是每個元素,對i做操作那么每個列表元素都會做相同的操作。單行批量對列表元素進行操作。
-----------------------結果:
['小*', '馬*', '過*', '河*']
li=["小","馬","過","河"]
print([i+"*" for i in li if type(li)==list]) #添加條件判斷
---------------------結果:
['小*', '馬*', '過*', '河*']
使用場景:對列表元素批量操作,只需要實現對列表單個元素實現一行執行(上題自變量i就是代表單個自變量,只需考慮對它操作),就可以實現單行代碼實現有循環的功能
?
2.2精簡案例:
請將ip=192.168.12.79中的四個十進制數轉換成二進制,將四個二進制數拼接成一個二進制數并轉換為十進制。(注意:12轉換為二進制位數不滿8位)
#精簡之前
ip="192.168.12.79" li=ip.split(".") li2=[] for i in li:m=str(bin(int(i))).lstrip("0b")m="0"*(8-len(m))+mli2.append(m) mcw="".join(li2) print(int(mcw,base=2))
-----------------------結果:
3232238671
#精簡之后
print(int("".join(["0"*(8-len(str(bin(int(i))).lstrip("0b")))+str(bin(int(i))).lstrip("0b") for i in ip.split(".")]),base=2))
?
?2.3單行實現列表元素的批量操作并且if判斷某個條件真假,真假各自返回不同結果(三木運算結合列表)
li=["小","馬","過","河"] a=[i+"*" for i in li ] b=[i+"_" for i in li ] print(a if "馬" in li else b) ----------------結果: ['小*', '馬*', '過*', '河*'] #判斷為真需要返回的結果ali=["小","馬","過","河"] a=[i+"*" for i in li ] b=[i+"_" for i in li ] print(a if "魔" in li else b) -------------------結果: ['小_', '馬_', '過_', '河_'] #判斷為假需要返回的結果bli=["小","馬","過","河"] print([i+"*" for i in li ] if "過" in li else [i+"_" for i in li ]) #將a,b變量的值直接替換a,b變量的位置,單行實現功能 -------------結果: ['小*', '馬*', '過*', '河*']
?2.4、單行實現給每個列表元素加*并加一個序列,使得列表元素對應有序。(兩個不同的for循環)
li=["小","馬","過","河"] a=[i+"*" for i in li ] b=[str(j)+" "+a[j] for j in range(0,len(a))] print(b) ----------------------結果: ['0 小*', '1 馬*', '2 過*', '3 河*']
變量代入代碼后:
li=["小","馬","過","河"] print([str(j)+" "+[i+"*" for i in li ][j] for j in range(0,len([i+"*" for i in li ]))])
2.5、if判斷,指定哪個列表元素做或者不做批量操作
li=["小","馬","過","河"] a=[i for i in li if i!="過"] print(a) -----------------------結果: ['小', '馬', '河']
?2.6、列表中可以用多個for循環,此次演示兩個for循環
a=[str(i)+j for i in range(1,5) for j in ["小","馬","過","河"]] print(a) --------------------------結果: ['1小', '1馬', '1過', '1河', '2小', '2馬', '2過', '2河', '3小', '3馬', '3過', '3河', '4小', '4馬', '4過', '4河']
?2.7、集合和字典也可以這樣支持這些操作
a={i for i in range(0,5)} print(a,type(a)) --------------------------結果: {0, 1, 2, 3, 4} <class 'set'>
m={i:j for i in range(1,4) for j in range(1,4)}
print(m,type(m))
-----------結果:
{1: 3, 2: 3, 3: 3} <class 'dict'>
2.8、一行代碼實現九九乘法表。讓變量成為 [for 循環]
a="\n".join([" ".join(["%s*%s"%(i,j) for j in range(1,i+1)]) for i in range(1,10)]) print(a) ------------------------結果: 1*1 2*1 2*2 3*1 3*2 3*3 4*1 4*2 4*3 4*4 5*1 5*2 5*3 5*4 5*5 6*1 6*2 6*3 6*4 6*5 6*6 7*1 7*2 7*3 7*4 7*5 7*6 7*7 8*1 8*2 8*3 8*4 8*5 8*6 8*7 8*8 9*1 9*2 9*3 9*4 9*5 9*6 9*7 9*8 9*9
?2.10九九乘法表一行實現過程分解
a=[i for i in range(1,5)] print(a) b=[["%s*%s"%(i,j) for j in range(1,i+1)] for i in range(1,5)] print(b) c=[" ".join(["%s*%s"%(i,j) for j in range(1,i+1)]) for i in range(1,5)] print(c) d="\n".join([" ".join(["%s*%s"%(i,j) for j in range(1,i+1)]) for i in range(1,5)]) print(d) ------------------------結果: [1, 2, 3, 4] [['1*1'], ['2*1', '2*2'], ['3*1', '3*2', '3*3'], ['4*1', '4*2', '4*3', '4*4']] #生成嵌套列表 ['1*1', '2*1 2*2', '3*1 3*2 3*3', '4*1 4*2 4*3 4*4']#用jion方法將每個子列表的元素分解成指定分隔符的字符串,形成每行要顯示的內容。已經將每行的內容變成列表元素了 1*1 #每個列表元素都是一行的內容,用jion方法將每個元素用換行符拼接起來,實現換行 2*1 2*2 3*1 3*2 3*3 4*1 4*2 4*3 4*4
思路:每行輸出用生成的嵌套子列表,每列輸出用列?????
join可以實現列表每個元素換行輸出(換行符作為分隔符),
join可以實現每個列表元素指定分隔符(包括空格符)拼接
jion可以實現將嵌套子列表生成字符串拼接
列表內循環([i for i in ... ])可以生成嵌套列表,jion可以分解列表成字符串。
jion加列表內循環可以用一行代碼實現有規律的多行打印
jion加列表內循環可以用一行代碼實現99乘法表等多行的結構
?2.11、[如果不能返回多個變量,那么將多個變量放到一個數據類型返回]
題目:(a+b+c=1000,a^2+b^2=c^2,a,b,c屬于整數,求a,b,c的組合。)執行有點慢,1000^3次循環呢
print([ [a,b,c] for a in range(0,1001) for b in range(0,1001) for c in range(0,1001) if a+b+c==1000 and a**2+b**2==c**2])
---------結果:
[[0, 500, 500], [200, 375, 425], [375, 200, 425], [500, 0, 500]]
?2.12、列表推導式和字典推導式結合,由此得出將兩個列表元素一個當鍵一個當值做成字典
print([[ i for i in range(3)] for i in range(3)]) print([{"k"+str(i):"v"+str(j) for j in range(3)} for i in range(3)]) print([["k"+str(i)+":"+"v"+str(j) for j in range(3)] for i in range(3)]) print([[{"k"+str(i):"v"+str(j)} for j in range(3)] for i in range(3)]) -------------結果: [[0, 1, 2], [0, 1, 2], [0, 1, 2]] [{'k0': 'v2'}, {'k1': 'v2'}, {'k2': 'v2'}] [['k0:v0', 'k0:v1', 'k0:v2'], ['k1:v0', 'k1:v1', 'k1:v2'], ['k2:v0', 'k2:v1', 'k2:v2']] [[{'k0': 'v0'}, {'k0': 'v1'}, {'k0': 'v2'}], [{'k1': 'v0'}, {'k1': 'v1'}, {'k1': 'v2'}], [{'k2': 'v0'}, {'k2': 'v1'}, {'k2': 'v2'}]]
兩個列表元素一個當鍵一個當值做成字典
li1=["name","age","hobby"]
li2=["mcw,18,study","xiaoma,19,music","yh,10,eat"]
print([[li1[j]+":"+li2[i].split(",")[j] for j in range(0,len(li1))] for i in range(0,len(li2))])
mcw=[{li1[j]:li2[i].split(",")[j] for j in range(0,len(li1))} for i in range(0,len(li2))]
print(mcw)
print(type(mcw[0]))
-------------結果:
[['name:mcw', 'age:18', 'hobby:study'], ['name:xiaoma', 'age:19', 'hobby:music'], ['name:yh', 'age:10', 'hobby:eat']]
[{'name': 'mcw', 'age': '18', 'hobby': 'study'}, {'name': 'xiaoma', 'age': '19', 'hobby': 'music'}, {'name': 'yh', 'age': '10', 'hobby': 'eat'}]
<class 'dict'>
?2.12、列表 推導式實現多個條件判斷
如果a=1,輸出m,如果a=2,輸出c,如果否則輸出m
原操作:
a=3 if a==1:print("m") elif a==2:print("c") else:print("w") ----------------結果: w
推導式實現步驟:
a=3 print(["m" if a==1 else ["c" if a==2 else "w"]]) ---------------結果: [['w']]a=3 print(["m" if a==1 else "".join(["c" if a==2 else "w"])]) --------------結果: ['w']a=3 print("".join(["m" if a==1 else "".join(["c" if a==2 else "w"])])) -----------結果: wa=2 print("".join(["m" if a==1 else "".join(["c" if a==2 else "w"])])) ----------結果: ca=1 print("".join(["m" if a==1 else "".join(["c" if a==2 else "w"])])) -----------------結果: m
?2.13生成器推導式:
?
?3、一行定義簡單函數:lambda函數
4、map函數使用
?
進制參考鏈接:https://www.cnblogs.com/ds-3579/p/5246142.html