2017-08-31 43 views
-1

我有一個for遍歷元素zip建築內:跳過拉鍊建設所有其他元素

for user_vector, user in zip(sparse_matrix.transpose(), persons) 
    rating = user_vector.dot(similarity_matrix) 
    rating = np.array(rating.todense())[0] 
    ....... 

如果我想跳過所有其他元素的迭代a,我做a[::2],但它不」 t適用於zip結構。 當然,我可以設定新的變量的循環來處理這種需要的內部,但我需要像[::2]一個簡潔的解決方案,因爲我的代碼需要的極端readeble

回答

3

跳過在構成載體的元素。

for user_vector, user in zip(sparse_matrix.transpose()[::2], persons[::2]) 

時間明智的,這個工程以比list(zip(...))[::2]甚至更​​好,因爲你沒有在第一時間創建這些不需要的對。請注意,切片仍會在內存中創建數據的新副本。


x = [1, 2, 3, 4] 
y = ['foo', 'bar', 'baz', 'test'] 

out = list(zip(x[::2], y[::2])) 
print(out) 
[(1, 'foo'), (3, 'baz')] 
+0

這就是一個很好的答案! –

+0

現在,當我能夠測試,我看到,這種解決方案失敗,並帶有「內存錯誤」。數組和矩陣非常大,但是我在服務器上運行它。 –

+0

@LadenkovVladislav你的數據與我的答案無關。打開一個新問題,詢問您如何使用大數據。 –