2013-07-15 75 views
1

我有列表種子和leechs這對要求使用LEN()
長度 而使用這兩個名單回19是一個列表理解 -列表理解錯誤的長度

sldiff = [(int(seed)-int(leech)) for seed in seeds for leech in leechs] 

每個元素應該是種子和水蛭之間的區別(它們是字符串,因此必須被模擬)
但是len(sldiff)返回361!
我的問題是 - 爲什麼會發生,我該怎麼做才能獲得所需的sldiff列表?

+3

19 * 19 = 361是一個很好的起點 – keyser

回答

3

你正在做一個雙重列表理解 - 即你正在迭代'水蛭'中的每個條目的全部'種子'(所以19 * 19,即361)。

好像你真正想要做的是遍歷一個列表,每個列表是來自種子的相關入口和來自水蛭的入口的組合。這就是zip做:

[(int(seed) - int(leech)) for seed, leech in zip(seeds, leechs)] 
+0

OP在做什麼被稱爲笛卡爾產品。 –

+0

謝謝。我會在大約11分鐘內將您的答案標記爲正確。 – svineet

2
[(int(seed)-int(leech)) for seed in seeds for leech in leechs] 

類同爲:

temp = [] 
    for seed in seeds: 
     for leech in leechs: 
      temp.append(int(seed)-int(leech)) 

顯然,這是19 * 19

我想你想

[int(x)-int(y) for x, y in zip(seeds, leechs)] 
1

你得到19 * 19 =的結果361因爲兩個for循環。

我不清楚自己想要什麼,但很可能是這樣的:

sldiff = [int(seed[x]) - int(leech[x]) for x in xrange(len(seeds))] 

假設LEN(種子)== LEN(leechs)