回答
對我來說,例子有所不同。列表解析可能不會自然而然地發生,直到你用它們來解決一個或兩個for loop
解決不了的問題。
的幾點思考(其他人可能有更好的例子):
- 給出的單詞的列表中,找到長度爲5
- 鑑於號碼列表的話,返回素數的子集,乘以2
- 給定幸運餅乾語錄(或推文)的列表,返回一個長度不超過10個單詞的說明列表,並在每個結尾添加「在牀上」。
List內涵是相同的概念,思考一個for循環,除了他們是在同一行,你可以在線使用它們作爲參數。
myFunc([s.strip() for s in mystrings])
發電機組補充不會立即在內存中創建列表。他們步的值,當你遍歷他們,可以更有效率,如果你將提前停止遍歷他們不需要將整個結果馬上
這裏就是我想通過列表解析。
1)我需要輸出列表
2)我開始與列表/迭代。
3)我要麼需要上的所有元素執行操作和/或選擇從原來的名單的具體內容。
這使我下面的結構:
output = [ mangle(x) for x in selector(input)]
裂傷()是一些功能改變的元素。例如,我可能使用x.lower()
來使元素小寫。
我總是使用x
作爲迭代器。只是保持一致(並且我從不將它用作for
循環中的迭代器)。
選擇器()是輸出True
或False
的功能。通常這會是某種if語句。我主要使用這個存在的測試,特別是如果我是mangling
輸出。例如,x for x in input if input
。
列表解析可能非常好。我認爲他們真的提高了可讀性,而且不僅僅是一個巧妙的技巧。但請記住,它們只不過是一個for循環內聯。
嘗試編寫循環並嘗試將它們轉換爲列表理解可能是最容易的。
如果你剛剛開始使用列表解析,這是我的頭腦。首先寫你的循環正常:
results = []
# get all keys that aren't test strings and add to results list
for a in blah.keys():
if a not in ('test', 'foo'):
results.append(a)
我們創建一個列表理解,離開for循環,如果以相同的順序發言,並把它們放在同一行,把「最終結果」的代碼在開始:
results = [ results.append(a) for a in blah.keys() if a not in ('test', 'foo') ]
我們快到了!我們並不需要手動添加(a)根據什麼我們把表達的那部分將自動被添加到列表中,因此最終表達式爲:
# get all keys that aren't test strings and add to results list
results = [ a for a in blah.keys() if a not in ('test', 'foo') ]
HTH!
當我需要比較elemts兩個甚至更多的單獨列表。它變成了一種嵌套的理解。然後我被吹走了。需要花費很多時間來思考,測試閒置然後運行。有沒有優雅的思維方式,所以它只是走了。我相信會有,我認爲這使得它看起來很複雜...你的想法是什麼,使用理解的想法。 – Ashish 2012-01-12 06:43:32
你有沒有例子? – fileoffset 2012-01-19 05:01:47
- 1. Python的3.x的列表理解VS元組發電機
- 2. Python的 - 結果返回發電機列表,而不是(理解)
- 3. 的Python:如果列表解析裏聲明發電機
- 4. 在列表理解或發電機使用,而表達式
- 5. 發電機v/s返回列表 - Python
- 6. 的Python:轉換列表到發電機
- 7. 如何在Python中重寫這個列表理解?
- 8. Python列表理解理解
- 9. 列表與發電機理解速度加入功能
- 10. Python隨機排序的列表理解
- 11. Python列表理解
- 12. Python列表理解
- 13. 列表理解python
- 14. Go列表中的Python列表理解
- 15. R列表中的Python列表理解?
- 16. Python列表理解如何做
- 17. 列表發電機在Haskell
- 18. RSpec的發電機列表
- 19. 匿名列表如何在Python列表理解中工作?
- 20. 如何使用列表理解在python中擴展列表?
- 21. 瞭解iterables和發電機在Python
- 22. 如何處理Python中的列表理解中的異常?
- 23. 改寫單列表理解
- 24. 傳發電機VS列表爲Python任何
- 25. 如何在Python中分解這個列表理解?
- 26. 如何在Python中使用列表理解for循環python
- 27. 如何編寫列表理解來創建列表?
- 28. 發電機理解究竟如何工作?
- 29. 嵌套`if`的``for`的Matlab簡寫(如Python的列表理解)
- 30. 加入Python列表理解
不錯,但關於'selector(input)'是函數的部分在我看來有點誤導。 – wim 2012-01-12 05:17:11
> 3)我需要對所有元素執行操作和/或從原始列表中選擇特定元素。 'output = [mangle(x)for x in selector(input)]'< ->'output = [mangle(x)for x in selector(input)if check(x)]' – warvariuc 2012-01-12 06:11:28