Python基礎知識:善用列表推導式,優雅求解水仙花數

水仙花數字是多少

什麼是水仙花數

水仙花數也被稱為超完全數字不變數、自戀數、自冪數、阿姆斯壯數或阿姆斯特朗數,嚴格的定義水仙花數,是指一個 3 位數,它的每個位上的數字的 3次冪之和等於它本身。如371 = 3^3 + 7^3+ 1^3,則371是一個水仙花數。

Python中的求解思路

根據水仙花數的定義,可以理出下面的程式設計思路:

1。 新建一個空列表x,用以儲存所有的水仙花數

2。 在For迴圈中,對100-999之間的任意一個整數i,逐個分解出其個位數a、十位數b和百位數c,比較a、b、c三個數字的3次冪之和是否等於i本身,若等於,則將i新增到列表x中

3。 最後輸出的x即為求解的所有水仙花數

程式碼如下圖所示:

Python基礎知識:善用列表推導式,優雅求解水仙花數

注意,在將一個整數i分解出個位數a、十位數b和百位數c時,個位數a是i除以10後得到的餘數,百位數c是i除以100後得到的餘數,而十位數則是先將i整除10後得到整數部分,再將整數部分除以10後得到的餘數數即為十位數,上面程式碼執行結果如下,得到所有的水仙花數為[153,370,371,407]:

Python基礎知識:善用列表推導式,優雅求解水仙花數

使用列表推導式對程式碼進行優雅的改進

上面程式碼求解水仙花數時,實際程式碼行數為第9-15行共7行程式碼,太複雜了些,下面使用列表推導式作以下改進,程式碼如下:

Python基礎知識:善用列表推導式,優雅求解水仙花數

將上面的7行程式碼寫為第11行只有1行程式碼,執行結果仍然相同,即所有的水仙花數為[153,370,371,407],很明顯,程式碼簡化了太多。

另外,關於列表推導式,其通用的書寫形式如下:

[表示式 for 變數 in 列表] 或者 [表示式 for 變數 in 列表 if 條件]

結論

列表推導式是Python語言中一項獨有的特性,使用推導式可以從一個數據序列根據一定的條件方便的構建出另一個新的資料序列。

從現在開始,善用列表推導式,做一個合格的優雅的pythoner吧。

歡迎加關注,共同交流。