什麼是水仙花數

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

Python中的求解思路

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

新建一個空列表x,用以存儲所有的水仙花數在For循環中,對100-999之間的任意一個整數i,逐個分解出其個位數a、十位數b和百位數c,比較a、b、c三個數字的3次冪之和是否等於i本身,若等於,則將i添加到列表x中最後輸出的x即爲求解的所有水仙花數

代碼如下圖所示:

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

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

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

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

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

[表達式 for 變量 in 列表] 或者 [表達式 for 變量 in 列表 if 條件]

結論

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

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

歡迎加關注,共同交流。

查看原文 >>
相關文章