Python運(yùn)算符&=使用實(shí)例探究
寫在前面
最近我復(fù)習(xí)了一些 python 的運(yùn)算符知識(shí),然后學(xué)到了一些新的知識(shí),&=一個(gè)全新的運(yùn)算符。
位運(yùn)算
你可能已經(jīng)熟悉位運(yùn)算,其中&是一個(gè)二進(jìn)制的 AND 運(yùn)算符。1 & 1是True(1),但其他所有1和0的組合都是False(0)。
這個(gè)特性給了我們一個(gè)思路,那就是用位運(yùn)算來檢查一個(gè)整數(shù)是奇數(shù)還是偶數(shù),因?yàn)槠鏀?shù)的最后一位始終是1(你懂的,這里說的是二進(jìn)制表示):
for x in range(5):
print(f"{x}:是{'奇數(shù)' if x & 1 else '偶數(shù)'}")輸出:
0:是偶數(shù)
1:是奇數(shù)
2:是偶數(shù)
3:是奇數(shù)
4:是偶數(shù)
賦值語句
如果你熟悉賦值運(yùn)算符,比如+=,你會(huì)知道它們是一種有用的簡寫形式,用于執(zhí)行一個(gè)操作,然后將結(jié)果分配回原始對象,即運(yùn)算符左邊的對象。&=也是一樣,它執(zhí)行二進(jìn)制AND操作,并將值分配回原始對象。
a = 11 a &= 1 print(a) a &= 0 print(a) print(type(a))
輸出:
1
0
<class 'int'>
我不確定這是巧合還是設(shè)計(jì)的結(jié)果,但是相同的語法也可以用于對兩個(gè)集合的元素執(zhí)行AND操作,(感謝Terry Davis在評論中指出)它被稱為交集更新運(yùn)算符,是intersection_update()方法的縮寫。它更新原始集合,只保留在另一個(gè)集合中也有的每個(gè)元素。
但是你是否曾經(jīng)真正使用過這些&=運(yùn)算符,或者想象過它們的用途?直到今天,我都沒有...
基本上,無論何時(shí)你開始有一個(gè)假設(shè),你希望接受它...直到發(fā)生一個(gè)關(guān)鍵事件,證明它是錯(cuò)誤的。換句話說,如果你找到了至少一個(gè)反例,那么假設(shè)就被拒絕了,只有在它似乎仍然合理的情況下才接受假設(shè)(例如,當(dāng)它繼續(xù)通過你的測試時(shí))。
這是科學(xué)方法的典范,如果我還記得我的學(xué)校時(shí)光的話!
實(shí)際上,在數(shù)據(jù)整理中,這是一個(gè)相當(dāng)常見的用例:我將電子表格表示為Python字典的列表,我想找到并刪除所有的空值(如None和"")的列。
以下是代碼:
def remove_empty_columns(data):
columns_to_delete = set(data[0].keys())
for row in data:
# 只有在最新行的列也為空時(shí)保持True(=刪除)
columns_to_delete &= {key for key, value in row.items() if not value}
for row in data:
for column in columns_to_delete:
del row[column]
return data
當(dāng)然我可以使用 Pandas,但這樣可以避免使用龐大的依賴庫,我甚至懷疑Pandas的底層邏輯也是這個(gè)原理(如果有興趣你可以去驗(yàn)證一下)。
一個(gè)小技巧
如果你想求多個(gè)集合的交集,你可以使用 &將它們鏈接在一起:
set1 = {1, 2, 3}
set2 = {2}
set3 = {2, 3}
set4 = {1, 2}
set1 &= set2 & set3 & set4
print(set1)
輸出:
{2}
寫在最后
在 Python 中,&=是位運(yùn)算符的賦值操作,用于按位與操作并將結(jié)果賦值給左操作數(shù)。它具有多種實(shí)際應(yīng)用,包括判斷整數(shù)的奇偶性、執(zhí)行位運(yùn)算并更新原始對象,以及對多個(gè)集合執(zhí)行交集更新操作。
此外,我們還提供了一個(gè)實(shí)際的用例,即在數(shù)據(jù)整理中使用&=運(yùn)算符刪除僅包含空值值的列。通過迭代處理字典列表并使用&=運(yùn)算符來更新要?jiǎng)h除的列的集合,可以高效地完成此操作。
以上就是Python運(yùn)算符&=使用實(shí)例探究的詳細(xì)內(nèi)容,更多關(guān)于Python運(yùn)算符&=的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python中動(dòng)態(tài)檢測編碼chardet的使用教程
最近利用python抓取一些網(wǎng)上的數(shù)據(jù),遇到了編碼的問題。非常頭痛,幸運(yùn)的是找到了解決的方法,下面這篇文章主要跟大家介紹了關(guān)于Python中動(dòng)態(tài)檢測編碼chardet的使用方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07
Python實(shí)現(xiàn)一個(gè)優(yōu)先級隊(duì)列的方法
這篇文章主要介紹了Python實(shí)現(xiàn)一個(gè)優(yōu)先級隊(duì)列的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
Python中函數(shù)參數(shù)設(shè)置及使用的學(xué)習(xí)筆記
這篇文章主要介紹了Python中函數(shù)參數(shù)設(shè)置及使用的學(xué)習(xí)筆記,記錄了一些Python2.x與Python3.x中函數(shù)參數(shù)相關(guān)的不同點(diǎn),需要的朋友可以參考下2016-05-05
Python自動(dòng)化之實(shí)現(xiàn)桌面壁紙下載器
隨著計(jì)算機(jī)性能的提升,人們對計(jì)算機(jī)個(gè)性化的要求也越來越高了,自己使用的計(jì)算機(jī)當(dāng)然要設(shè)置成自己喜歡的風(fēng)格!本文就來用Python做個(gè)桌面壁紙下載器,需要的可以參考一下2022-11-11

