我想知道是否需要兩個列表解析來返回一個set/dict/list的有序對和set/dict/list。這裏是我的意思的例子:python創建一個集合/字典/列表和它的值從單個列表理解的總和
>>> l = ['abc', 'd', 'efgh', 'ij']
>>> {i: len(i) for i in l}, sum(len(i) for i in l)
({'efgh': 4, 'abc': 3, 'ij': 2, 'd': 1}, 10)
有沒有寫這比重複for i in l
內涵更好/更Python的方式?
UPDATE:
我問這個問題,因爲我在考慮寫一個特定lambda
的最佳方式;即
>>> l = ['abc', 'd', 'efgh', 'ij']
>>> dict_value = lambda l: ({i: len(i) for i in l}, sum(len(i) for i in l))
>>> dict_value(l)
({'efgh': 4, 'abc': 3, 'ij': 2, 'd': 1}, 10)
我問這個問題,因爲我不使用len()
計算我想要的值,而是一個昂貴的計算。如果我定義一個輔助方法而不是lambda來做工作,下面關於for循環的問題確實解決了這個問題。
問題在於它沒有利用列表解析的速度,這比列表速度快得多。 – qaphla
@qaphla:不* *要快得多,一個循環比2更好。 –
我運行的大多數測試都給列表推導的速度是標準循環的兩倍以上,但我確信這會因操作而異,所以不會爭論這一點。 – qaphla