大家好,我是Python進(jìn)階者。
前幾天在Python最強王者交流群有個(gè)叫【Chloe】的粉絲問(wèn)了一個(gè)Python集合的問(wèn)題,這里拿出來(lái)給大家分享下,一起學(xué)習下。

看到這個(gè)輸出結果應該很意外吧?
說(shuō)實(shí)話(huà),我一開(kāi)始也以為輸出的是第四個(gè)答案,但是實(shí)際上并不是。

這個(gè)題目很顯然是Python基礎知識,需要有一定的基礎才行。

那么這個(gè)地方關(guān)于is(比較的是內存地址id)和==(比較的是數值)的用法就安排上了。

我們都知道,集合會(huì )自動(dòng)去重,針對這個(gè)題目,最開(kāi)始容易想到的答案肯定是最后一個(gè),其實(shí)不然,如下圖所示:

結果讓人大跌眼鏡。

其實(shí)在Python集合里邊,去重,去的是重復的值。對于數字類(lèi)型(包括int、float、bool、complex)都是使用 == 進(jìn)行比較。

也就是說(shuō) True == 1 的結果也是True。那么print({1, 1.0, 1.00, True}),結果只能是{1}。

這里不得不提到,上次發(fā)的那個(gè)文章,小小明大佬用bool值去加上某個(gè)數字,用于字符串切片。詳情請戳:手把手教你使用Python提取快遞信息。

通過(guò)pandas進(jìn)行提取,這里使用小小明大佬給的指導代碼,可以提取省位,真不錯!

df['地區2']=df.地區.apply(lambda s: s[:(s in ("黑龍江省", "內蒙古自治區"))+2])
這個(gè)邏輯確實(shí)很強!
如此一來(lái),大家伙就都明白了。

這里【瑜亮老師】給出了充分的理論認證。Python的基本數據類(lèi)型有這6種:
不可變數據(3 個(gè)):Number(數字)、String(字符串)、Tuple(元組);
可變數據(3 個(gè)):List(列表)、Dictionary(字典)、Set(集合)。
其中Number有 int、float、bool、complex(復數)這4種。

既然4個(gè)都是Number,那就是說(shuō)他們就可以直接相加。那么True == 1 == 1.0 == 1e0的結果就是True!
驚不驚喜,意不意外?

真是到處都是知識盲區??!
這里【馮誠】大佬給出了一個(gè)示例,如下圖所示:


不得不承認,小小明大佬給我們帶來(lái)的驚訝實(shí)在是太多了。

大家好,我是Python進(jìn)階者。這篇文章主要盤(pán)點(diǎn)了Python集合中一個(gè)“坑”的問(wèn)題,給出了具體的解析和代碼演示,文中【瑜亮老師】演示了更深層次的Python講解,幫助大家加深了對Python數據類(lèi)型的理解,也順利地幫助粉絲解決了問(wèn)題。
最后感謝粉絲【Chloe】提問(wèn),感謝【瑜亮老師】給出的具體解析和代碼演示,感謝【老松鼠】、【Jun】、【PI】、【dcpeng】、【馮誠】、【月神】等人參與學(xué)習交流,感謝【小小明】大佬給出的代碼,讓大家嘆為觀(guān)止。
小伙伴們,快快用實(shí)踐一下吧!如果在學(xué)習過(guò)程中,有遇到任何Python問(wèn)題,歡迎加我好友,我拉你進(jìn)Python學(xué)習交流群共同探討學(xué)習。
------------------- End -------------------
聯(lián)系客服