2017-06-08 86 views
0

我是新來的python,但一般不編程。檢查「潛入Python」我找到了這個例子(這有效),但我沒有得到語法。Python:循環之前分配的變量

return ";".join(["%s=%s" % (k, v) for k, v in params.items()]) 

簡單地說,它使用變量K和V爲字符串爲「%s =%s」時(沒有怪異這裏),但是這些變量並沒有任何價值呢。就這樣有一個環路迭代,並且將值分配給K和V因此,這是我感到困惑: 1. 循環是「返回」莫名其妙值K和V以前的聲明(k,v)。對於k,v in params.items()),兩個語句(1. 「%s =%s」%(k,v)和2. )可以在同一行中,沒有語法錯誤。

我已經檢查過「for」語法參考,它甚至沒有提示這個方向,所以我確定我必須檢查其他地方,但不知道在哪裏。

預先感謝您。這個列表理解

+1

它被稱爲列表理解。 – polku

+2

,他們很簡單地解釋了你在提到的「潛入你的Python」。 http://www.diveintopython.net/native_data_types/mapping_lists.html – tagoma

回答

1

列表解析是一種將一個列表(實際上任何可迭代)轉換爲另一個列表的工具。在此轉換過程中,元素可以有條件地包含在新列表中,並且可以根據需要轉換每個元素。

如果你熟悉函數式編程,你能想到的列表理解爲語法糖爲filter後跟一個map

>>> doubled_odds = map(lambda n: n * 2, filter(lambda n: n % 2 == 1, numbers)) 
>>> doubled_odds = [n * 2 for n in numbers if n % 2 == 1] 

每個列表解析可以改寫爲一個循環,但不是每一個for循環可以被重寫爲列表理解。

如果你可以重寫你的代碼看起來就像這樣的循環,你也可以把它改寫成列表理解:

new_things = [] 
for ITEM in old_things: 
    if condition_based_on(ITEM): 
     new_things.append("something with " + ITEM) 

你可以把上面的for循環列表理解是這樣的:

new_things = ["something with " + ITEM for ITEM in old_things if condition_based_on(ITEM)]  
1
param.items() = [(key1, val1), (key2, val2) ... ] 

擴展代碼..首先生成方括號中的列表,然後將它傳遞給join方法一起加入列表。

new_list = [] 
for each_tuple in param.items(): 
    k = each_tuple(0) 
    v = each_tuple(1) 
    new_list.append("%s==%s" % (k, v,)) 
":".join(new_list)   # new_list = ['k1==v1', 'k2==v2', 'k3==v3',...] 

>>> 'key1==value1:key2==value2:key3==value3....' 
相關問題