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ì)知道它們是一種有用的簡(jiǎn)寫形式,用于執(zhí)行一個(gè)操作,然后將結(jié)果分配回原始對(duì)象,即運(yùn)算符左邊的對(duì)象。&=
也是一樣,它執(zhí)行二進(jìn)制AND操作,并將值分配回原始對(duì)象。
a = 11 a &= 1 print(a) a &= 0 print(a) print(type(a))
輸出:
1
0
<class 'int'>
我不確定這是巧合還是設(shè)計(jì)的結(jié)果,但是相同的語法也可以用于對(duì)兩個(gè)集合的元素執(zhí)行AND操作,(感謝Terry Davis在評(píng)論中指出)它被稱為交集更新運(yùn)算符,是intersection_update()方法的縮寫。它更新原始集合,只保留在另一個(gè)集合中也有的每個(gè)元素。
但是你是否曾經(jīng)真正使用過這些&=運(yùn)算符,或者想象過它們的用途?直到今天,我都沒有...
基本上,無論何時(shí)你開始有一個(gè)假設(shè),你希望接受它...直到發(fā)生一個(gè)關(guān)鍵事件,證明它是錯(cuò)誤的。換句話說,如果你找到了至少一個(gè)反例,那么假設(shè)就被拒絕了,只有在它似乎仍然合理的情況下才接受假設(shè)(例如,當(dāng)它繼續(xù)通過你的測(cè)試時(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)算并更新原始對(duì)象,以及對(duì)多個(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)算符&=的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python3中編碼獲取網(wǎng)頁的實(shí)例方法
在本篇文章里小編給大家整理了一篇關(guān)于python3中編碼獲取網(wǎng)頁的實(shí)例方法,有興趣的朋友們可以學(xué)習(xí)下。2020-11-11python驗(yàn)證碼識(shí)別教程之滑動(dòng)驗(yàn)證碼
這篇文章主要給大家介紹了關(guān)于python驗(yàn)證碼識(shí)別教程之滑動(dòng)驗(yàn)證碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06python自動(dòng)統(tǒng)計(jì)zabbix系統(tǒng)監(jiān)控覆蓋率的示例代碼
這篇文章主要介紹了python自動(dòng)統(tǒng)計(jì)zabbix系統(tǒng)監(jiān)控覆蓋率的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04numpy中np.append()函數(shù)用法小結(jié)
在numpy的函數(shù)庫中,np.append()函數(shù)是一個(gè)常用的數(shù)組操作函數(shù),它在進(jìn)行數(shù)組操作時(shí)能夠?qū)蓚€(gè)數(shù)組進(jìn)行拼接,并返回一個(gè)拼接后的新數(shù)組,下面就來介紹一下具體用法,感興趣的可以了解一下2023-11-11python用quad、dblquad實(shí)現(xiàn)一維二維積分的實(shí)例詳解
今天小編大家分享一篇python用quad、dblquad實(shí)現(xiàn)一維二維積分的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11python selenium 對(duì)瀏覽器標(biāo)簽頁進(jìn)行關(guān)閉和切換的方法
今天小編就為大家分享一篇python selenium 對(duì)瀏覽器標(biāo)簽頁進(jìn)行關(guān)閉和切換的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05pytorch教程網(wǎng)絡(luò)和損失函數(shù)的可視化代碼示例
這篇文章主要介紹了pytorch教程中網(wǎng)絡(luò)和損失函數(shù)的可視化,文中附含詳細(xì)的代碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09Python打包文件執(zhí)行報(bào)錯(cuò):ModuleNotFoundError: No module 
這篇文章給大家介紹了Python打包文件執(zhí)行報(bào)錯(cuò):ModuleNotFoundError: No module named ‘pymssql‘的解決方法,如果有遇到相同問題的朋友可以參考閱讀一下本文2023-10-10