Python-100 | 练习题 01 列表推导式
最近打算好好練習下 python,因此找到一個練習題網站,打算每周練習 3-5 題吧。
http://www.runoob.com/python/python-100-examples.html
另外,這個網站其實也還有 Python 的教程,從基礎到高級的知識都有。
Example-1 三位數組合
題目:有四個數字:1、2、3、4,能組成多少個互不相同且無重復數字的三位數?各是多少?
思路
最簡單的方法,就是窮舉法了,分別求出在百位、十位、個位上的數字,然后剔除出現重復數字的組合,剩余的就是答案了。
代碼實現
直接代碼實現如下:
def?create_three_digits(number_start=1,?number_end=4):'''給定指定數字范圍(比如1到4),求可以組成多少個無重復的三位數:param?number_start:?起始數字:param?number_end:?結束數字:return:?返回數量,以及可能的三位數的列表'''count?=?0result_list?=?list()for?i?in?range(number_start,?number_end?+?1):for?j?in?range(number_start,?number_end?+?1):for?k?in?range(number_start,?number_end?+?1):if?(i?!=?j)?and?(i?!=?k)?and?(j?!=?k):count?+=?1result_list.append(str(i)?+?str(j)?+?str(k))return?count,?result_list寫得更加簡便點,可以采用列表推導式:
def?create_three_digits2(number_start=1,?number_end=4):'''采用列表推導式實現:param?number_start::param?number_end::return:'''return?[str(i)?+?str(j)?+?str(k)?for?i?in?range(number_start,?number_end?+?1)?for?j?inrange(number_start,?number_end?+?1)?for?k?inrange(number_start,?number_end?+?1)?if?(i?!=?j)?and?(i?!=?k)?and?(j?!=?k)]輸出結果如下,總共有 24 種不同的排列組合。
valid?count=24,?and?they?are: 123 124 132 134 142 143 213 214 231 234 241 243 312 314 321 324 341 342 412 413 421 423 431 432當然,目前這種代碼實現的時間復雜度是很高的,畢竟是三個for循環。如果有更好的解法,可以在后臺留言,告訴我!
知識點復習--列表推導式
列表推導式(又稱列表解析式)提供了一種簡明扼要的方法來創建列表。
它的結構是在一個中括號里包含一個表達式,然后是一個 for 語句,然后是 0 個或多個 for 或者 if 語句。那個表達式可以是任意的,意思是你可以在列表中放入任意類型的對象。返回結果將是一個新的列表,在這個以 if 和 for 語句為上下文的表達式運行完成之后產生。
用代碼表示列表推導式如下:
variable?=?[out_exp?for?out_exp?in?input_list?if?out_exp?==?2]一個簡明的例子如下:
multiples?=?[i?for?i?in?range(30)?if?i?%?3?is?0] print(multiples) #?Output:?[0,?3,?6,?9,?12,?15,?18,?21,?24,?27]那么,什么時候最適合用列表推導式呢?
其實是當你需要使用 for 循環來生成一個新列表。舉個例子,你通常會這樣做:
squared?=?[] for?x?in?range(10):squared.append(x**2)這時候,采用列表推導式最合適:
squared?=?[x**2?for?x?in?range(10)]源代碼在:
https://github.com/ccc013/CodesNotes/blob/master/Python_100_examples/example1.py
或者點擊原文,也可以查看源代碼。
參考文章:
https://eastlakeside.gitbooks.io/interpy-zh/content/Comprehensions/list-comprehensions.html
歡迎關注我的微信公眾號--機器學習與計算機視覺,或者掃描下方的二維碼,大家一起交流,學習和進步!
往期精彩推薦
學習筆記
機器學習入門系列(1)--機器學習概覽
[GAN學習系列] 初識GAN
[GAN學習系列2] GAN的起源
[GAN學習系列3]采用深度學習和 TensorFlow 實現圖片修復(上)
數學學習筆記
程序員的數學筆記1--進制轉換
程序員的數學筆記2--余數
程序員的數學筆記3--迭代法
Github項目 & 資源教程推薦
[Github 項目推薦] 一個更好閱讀和查找論文的網站
[資源分享] TensorFlow 官方中文版教程來了
必讀的AI和深度學習博客
[教程]一份簡單易懂的 TensorFlow 教程
[資源]推薦一些Python書籍和教程,入門和進階的都有!
總結
以上是生活随笔為你收集整理的Python-100 | 练习题 01 列表推导式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 收藏100个网络基础知识
- 下一篇: python模拟购物车购物过程_Pyth