python基礎知識-8-三元和一行代碼(推導式)

?

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

轉載于:https://www.cnblogs.com/machangwei-8/p/10668571.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279735.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279735.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279735.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

雙11成交多少和我無關,但這個魔性MV真的讓我笑噴!

今年天貓雙11&#xff0c;印象最深的就是“祝你雙11快樂”這句話&#xff01;它讓大家感覺到雙11不再只是一個購物節&#xff0c;而是一個能引起廣泛共鳴、讓大家有快樂情感的真正節日。以往的傳統節日&#xff0c;都有一個標志性的符號&#xff0c;正如腦海中的每年春晚&#…

ios beta 下載_如何回滾到iOS 10(如果您使用的是iOS 11 Beta)

ios beta 下載So you’ve installed the iOS 11 beta and, well, you don’t love it. No problem, because you can roll right back to iOS 10. 因此&#xff0c;您已經安裝了iOS 11 Beta &#xff0c;但是&#xff0c;您不喜歡它。 沒問題&#xff0c;因為您可以直接回滾到i…

JmsTemplate sendAndReceive 設置超時

通過調用sendAndReceive方法&#xff0c;實現發送消息之后可以同步接收返回信息。 Message replyMsg this.jmsQueueTemplate.sendAndReceive(new MessageCreator(){Overridepublic Message createMessage(Session sn) throws JMSException {TextMessage txtMsg sn.createText…

亞信科技數據庫AntDB通過金融分布式事務數據庫標準測試

近日,南京, 中國信息通信研究院云計算與大數據研究所(以下簡稱“中國信通院云大所”)組織專家對亞信科技(股票代碼:01675.HK)的數據庫產品AISWare AntDB(以下簡稱“AntDB”),進行了金融分布式事務數據庫標準測試,所有功能順利通過測試。該測試的通過充分彰顯了亞信科技AntDB是一…

安裝sql2012 需要安裝net3.5 沒有的話 安裝不成功

Error while enabling Windows feature : NetFx3, Error Code : -2146498298 在 Windows 8 或 Windows Server 2012 中安裝 .NET Framework 3.5 時出現錯誤代碼&#xff1a;0x800F0906 winx 管理員權限 打開cmd命令提示符處&#xff0c;運行下面的命令&#xff1a; Dism /onl…

instagram發布工具_如何在不發布照片的情況下保存已編輯的Instagram照片

instagram發布工具Unfortunately, there’s no built-in method for saving your edited Instagram photos without posting them first. However, with this neat trick, you can add Instagram filters to your photos and save them locally to your phone without actually…

Verify the Developer App certificate for your account is trusted on your device.

1、報錯內容 Could not launch “CH5203” Verify the Developer App certificate for your account is trusted on your device. Open Settings on 測試 and navigate to General -> Device Management, then select your Developer App certificate to trust it. 2、解決方…

HTTP2和HTTPS來不來了解一下?

一、前言 只有光頭才能變強 HTTP博文回顧&#xff1a; PC端&#xff1a;HTTP就是這么簡單PC端&#xff1a;HTTP面試題都在這里微信公眾號端&#xff1a;HTTP就是這么簡單微信公眾號端&#xff1a;HTTP面試題都在這里本文力求簡單講清每個知識點&#xff0c;希望大家看完能有所收…

apple默認備份位置_如何將Apple Maps默認設置為步行路線

apple默認備份位置The default mode of transportation in Apple Maps is set to driving, but with a simple tweak, you can adjust your Apple Maps experience to default to the mode you use most. Apple Maps中的默認交通方式設置為行車&#xff0c;但是通過簡單的調整&…

php 面向對象

1類的創建 class創建類 class Person{} 2.對象的創建 使用new關鍵字 class Person{} $p1new Person 3.成員的添加 添加成員需要 三個修飾符 public 公開的 定義公共的屬性和方法&#xff0c;類的外部&#xff0c;類的內部&#xff0c;子類都可以使用 protected 受保護的 定義…

apache 404\403錯誤頁面跳轉

1、全局下使用404跳轉 在httpd.conf下配置跳轉 1vim /usr/local/httpd/conf/httpd.conf 123456<Directory "/usr/local/httpd-2.4.25/htdocs"> AllowOverride None Require all granted ErrorDocument 404 /aa.jpg #配置跳轉頁面&#xff0c;注意aa文件必須在…

JS實現千分位

方法一&#xff1a;正則實現 function format (num) { var reg/\d{1,3}(?(\d{3})$)/g; return (num ).replace(reg, $&,); } 解釋&#xff1a; 1、正則表達式 \d{1,3}(?(\d{3})$) 表示前面有1~3個數字&#xff0c;后面的至少由一組3個數字結尾 2、?表示正向引用&…

白色褲子為什么會沾上藍色_什么是藍色的,為什么它可以在Mac上運行?

白色褲子為什么會沾上藍色You’re looking through Activity Monitor when you notice a process called blued. Should you be worried that this is running? No: it’s the process that powers Bluetooth on your Mac. 當您發現一個名為blued的進程時&#xff0c;您正在瀏…

ThreadLocal源碼剖析

。。轉載于:https://www.cnblogs.com/Joy-Hu/p/10677434.html

Linux移植之內核啟動過程引導階段分析

在Linux移植之make uImage編譯過程分析中已經提到了uImage是一個壓縮的包并且內含壓縮程序&#xff0c;可以進行自解壓。自解壓完成之后內核代碼從物理地址為0x30008000處開始運行。下面分析在進入C之前內核做的一些工作&#xff0c;以下是內核啟動過程中打印出來的信息&#x…

阿里開源HTML5小游戲開發框架Hilo實戰教程

前言 開發基于Html5的小游戲并不困難&#xff0c;基本思路就是使用Html5的canvas進行游戲圖像繪制&#xff0c;通過監聽Dom元素的touch事件并觸發相應的動畫&#xff0c;來實現游戲的交互。難在于解決開發后面臨的不同設備游戲畫面、音效等兼容性問題。 使用Hilo可以幫助我們解…

outlook附件大小限制_如何在Outlook中調整大圖片附件的大小

outlook附件大小限制When you have to send someone a large image file through email, it’s a good idea to resize the image file to make it smaller before sending it. Outlook makes this easy and allows you to resize the image file as it’s sent. 當您必須通過電…

bzoj2460: [BeiJing2011]元素

怕不是學了個假的線性基。。。一直以為要高位到低位插入&#xff0c;結果那個是高斯消元的線性基。。。 那么直接排序權值就行了。 #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<…

西湖論劍WP

先水幾句&#xff0c;這次的題確實難啊&#xff0c;動用洪荒之力了&#xff0c;第一名的神仙也沒有全部做完。 官方說這次的題目有兩道沒被做出來&#xff0c;我猜應該是PWN和RE吧 本來我們是45名的&#xff0c;最后5分鐘那幫人啊&#xff0c;硬生生給我們擠出前50&#xff0c;…

vm macos 啟用3d_如何在macOS中啟用夜班以減輕眼睛疲勞

vm macos 啟用3dNight Shift is a new feature introduced in macOS Sierra 10.12.4, and you might already be familiar with it if you’re an iOS user. Here’s how to enable it and set it up on your Mac. Night Shift是macOS Sierra 10.12.4中引入的新功能&#xff0c…