Python-100 | 练习题 01 列表推导式
最近打算好好練習(xí)下 python,因此找到一個練習(xí)題網(wǎng)站,打算每周練習(xí) 3-5 題吧。
http://www.runoob.com/python/python-100-examples.html
另外,這個網(wǎng)站其實(shí)也還有 Python 的教程,從基礎(chǔ)到高級的知識都有。
Example-1 三位數(shù)組合
題目:有四個數(shù)字:1、2、3、4,能組成多少個互不相同且無重復(fù)數(shù)字的三位數(shù)?各是多少?
思路
最簡單的方法,就是窮舉法了,分別求出在百位、十位、個位上的數(shù)字,然后剔除出現(xiàn)重復(fù)數(shù)字的組合,剩余的就是答案了。
代碼實(shí)現(xiàn)
直接代碼實(shí)現(xiàn)如下:
def?create_three_digits(number_start=1,?number_end=4):'''給定指定數(shù)字范圍(比如1到4),求可以組成多少個無重復(fù)的三位數(shù):param?number_start:?起始數(shù)字:param?number_end:?結(jié)束數(shù)字:return:?返回?cái)?shù)量,以及可能的三位數(shù)的列表'''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寫得更加簡便點(diǎn),可以采用列表推導(dǎo)式:
def?create_three_digits2(number_start=1,?number_end=4):'''采用列表推導(dǎo)式實(shí)現(xiàn):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)]輸出結(jié)果如下,總共有 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當(dāng)然,目前這種代碼實(shí)現(xiàn)的時間復(fù)雜度是很高的,畢竟是三個for循環(huán)。如果有更好的解法,可以在后臺留言,告訴我!
知識點(diǎn)復(fù)習(xí)--列表推導(dǎo)式
列表推導(dǎo)式(又稱列表解析式)提供了一種簡明扼要的方法來創(chuàng)建列表。
它的結(jié)構(gòu)是在一個中括號里包含一個表達(dá)式,然后是一個 for 語句,然后是 0 個或多個 for 或者 if 語句。那個表達(dá)式可以是任意的,意思是你可以在列表中放入任意類型的對象。返回結(jié)果將是一個新的列表,在這個以 if 和 for 語句為上下文的表達(dá)式運(yùn)行完成之后產(chǎn)生。
用代碼表示列表推導(dǎo)式如下:
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]那么,什么時候最適合用列表推導(dǎo)式呢?
其實(shí)是當(dāng)你需要使用 for 循環(huán)來生成一個新列表。舉個例子,你通常會這樣做:
squared?=?[] for?x?in?range(10):squared.append(x**2)這時候,采用列表推導(dǎo)式最合適:
squared?=?[x**2?for?x?in?range(10)]源代碼在:
https://github.com/ccc013/CodesNotes/blob/master/Python_100_examples/example1.py
或者點(diǎn)擊原文,也可以查看源代碼。
參考文章:
https://eastlakeside.gitbooks.io/interpy-zh/content/Comprehensions/list-comprehensions.html
歡迎關(guān)注我的微信公眾號--機(jī)器學(xué)習(xí)與計(jì)算機(jī)視覺,或者掃描下方的二維碼,大家一起交流,學(xué)習(xí)和進(jìn)步!
往期精彩推薦
學(xué)習(xí)筆記
機(jī)器學(xué)習(xí)入門系列(1)--機(jī)器學(xué)習(xí)概覽
[GAN學(xué)習(xí)系列] 初識GAN
[GAN學(xué)習(xí)系列2] GAN的起源
[GAN學(xué)習(xí)系列3]采用深度學(xué)習(xí)和 TensorFlow 實(shí)現(xiàn)圖片修復(fù)(上)
數(shù)學(xué)學(xué)習(xí)筆記
程序員的數(shù)學(xué)筆記1--進(jìn)制轉(zhuǎn)換
程序員的數(shù)學(xué)筆記2--余數(shù)
程序員的數(shù)學(xué)筆記3--迭代法
Github項(xiàng)目 & 資源教程推薦
[Github 項(xiàng)目推薦] 一個更好閱讀和查找論文的網(wǎng)站
[資源分享] TensorFlow 官方中文版教程來了
必讀的AI和深度學(xué)習(xí)博客
[教程]一份簡單易懂的 TensorFlow 教程
[資源]推薦一些Python書籍和教程,入門和進(jìn)階的都有!
總結(jié)
以上是生活随笔為你收集整理的Python-100 | 练习题 01 列表推导式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 收藏100个网络基础知识
- 下一篇: 黑色背景的DW代码配色方案 Colors