2017-07-25 70 views
0

我遇到了這段代碼,我知道它是一個笛卡兒積,但是如果有人能從下面的代碼中爲我分解這一行[s+t for s in a for t in b]以及這種語法的文檔鏈接。用於在循環中生成字典的Python

顯然這for in語法與s+t ???對我來說是陌生的,我也是python的新手。欣賞文檔鏈接,所以我可以更多地瞭解這種語法,因爲我試圖理解的循環中還有其他變體。

rows = 'ABCDEFGHI' 
cols = '123456789' 

def cross(a, b): 
    return [s+t for s in a for t in b] 

def main(): 
    print(cross(rows, cols)) 

if __name__ == "__main__": main() 

回答

3

這是一種稱爲列表理解的簡寫語法。見5.1.4節的文檔的:https://docs.python.org/2/tutorial/datastructures.html

該生產線是完全等效於該:

lst = [] 
for s in a: 
    for t in b: 
     lst.append(s+t) 
return lst 

它只是發現在a每對的元素的和在b的元素的總和。

+0

輸出是完全相同的,但它們不一樣(是迂腐)。 –

+1

當然,例如可能會有一些小的性能差異:https://stackoverflow.com/questions/22108488/are-list-comprehensions-and-functional-functions-faster-than-for-loops – perigon

+1

我其實剛讀完那個帖子確認我沒有說出我的屁股。 –

1

可以細分爲:

lst = [] 
for s in A: 
    for t in b: 
     lst.append(s+t) 
return lst 

希望這有助於!