我有列表種子和leechs這對要求使用LEN()
長度 而使用這兩個名單回19是一個列表理解 -列表理解錯誤的長度
sldiff = [(int(seed)-int(leech)) for seed in seeds for leech in leechs]
每個元素應該是種子和水蛭之間的區別(它們是字符串,因此必須被模擬)
但是len(sldiff)
返回361!
我的問題是 - 爲什麼會發生,我該怎麼做才能獲得所需的sldiff列表?
我有列表種子和leechs這對要求使用LEN()
長度 而使用這兩個名單回19是一個列表理解 -列表理解錯誤的長度
sldiff = [(int(seed)-int(leech)) for seed in seeds for leech in leechs]
每個元素應該是種子和水蛭之間的區別(它們是字符串,因此必須被模擬)
但是len(sldiff)
返回361!
我的問題是 - 爲什麼會發生,我該怎麼做才能獲得所需的sldiff列表?
你正在做一個雙重列表理解 - 即你正在迭代'水蛭'中的每個條目的全部'種子'(所以19 * 19,即361)。
好像你真正想要做的是遍歷一個列表,每個列表是來自種子的相關入口和來自水蛭的入口的組合。這就是zip
做:
[(int(seed) - int(leech)) for seed, leech in zip(seeds, leechs)]
OP在做什麼被稱爲笛卡爾產品。 –
謝謝。我會在大約11分鐘內將您的答案標記爲正確。 – svineet
[(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)]
你得到19 * 19 =的結果361因爲兩個for循環。
我不清楚自己想要什麼,但很可能是這樣的:
sldiff = [int(seed[x]) - int(leech[x]) for x in xrange(len(seeds))]
假設LEN(種子)== LEN(leechs)
19 * 19 = 361是一個很好的起點 – keyser