2015-10-20 69 views
1

我有兩個列表:list_1 = [0,1,0,0,1,1,0,1,1,0]list_2 = [1,2,2,4,4,6,7,8,8,10]具有相同數量的元素。我試圖通過這些列表來循環使用4個單獨的值,這些值將成爲函數的一部分。Python:兩個列表迭代內循環索引

我到目前爲止有:

list_1 = [0,1,0,0,1,1,0,1,1,0] 
list_2 = [1,2,2,4,4,6,7,8,8,10] 
for i,x in enumerate(list_1): 
    var_list_1_1 = x 
    var_list_1_2 = [z for y,z in enumerate(list_1) if y != i] 
    var_list_2_1 = list_2[i] 
    var_list_2_2 = [z for y,z in enumerate(list_2) if y != i] 

    print("{}\n{}\n{}\n{}".format(var_list_1_1,var_list_1_2, var_list_2_1,var_list_2_2)) 

此打印正確,但我不知道這是最好的方式。我將使用這個約一到兩千行的數據,我不確定這是否會成爲問題。我在這個項目中使用numpy和pandas作爲其他庫,所以解決方案也可以。感謝您的任何見解。

編輯: 我想每個循環產生類似於下面的東西。它是該項目,然後是沒有該項目的列表。兩個列表必須是相同的項目索引。我正在製作一個火車/測試功能集/數組和一個火車/測試目標數組scikit學習如果有幫助。我只是想通過訓練整個集合並測試一個值來進行迭代。

var_list_1_1 = 0 
var_list_1_2 = [1,0,0,1,1,0,1,1,0] 
var_list_2_1 = 1 
var_list_2_2 = [2,2,4,4,6,7,8,8,10] 

回答

2

我覺得它似乎更具可讀性:

for i in xrange(len(list_1)-1): 
    l1 = list_1[:] 
    l2 = list_2[:] 
    var_list_1_1 = l1.pop(i) 
    var_list_1_2 = l1 
    var_list_2_1 = l2.pop(i) 
    var_list_2_2 = l2 
+0

這對指定的列表來說效果很好,但是我的列表實際上是沒有彈出功能的numpy數組:/ – nahata5

2

您可以使用Python中ziparray.T方法numpy的,以箱列的一個新的數組:

>>> list_1 = [0,1,0,0,1,1,0,1,1,0] 
>>> list_2 = [1,2,2,4,4,6,7,8,8,10] 
>>> for i,j in zip(list_1,list_2): 
...  #do stuff 
... 
>>> 

或者:

>>> list_1 = np.array([0,1,0,0,1,1,0,1,1,0]) 
>>> list_2 = np.array([1,2,2,4,4,6,7,8,8,10]) 
>>> for i,j in np.array((list_1,list_2)).T: 
...  #do stuff 
... 
>>> 

>>> np.array((list_1,list_2)).T 
array([[ 0, 1], 
     [ 1, 2], 
     [ 0, 2], 
     [ 0, 4], 
     [ 1, 4], 
     [ 1, 6], 
     [ 0, 7], 
     [ 1, 8], 
     [ 1, 8], 
     [ 0, 10]]) 
+0

在這些,我不會仍然需要通過創建一個新的numpy數組或列表理解的值來定義剩餘的列表嗎?這樣可以更容易地將兩個列表鏈接在一起,但是從那裏我將如何從兩個列表中將索引i與項目相關聯,然後將列表的其餘部分作爲新的單獨變量? – nahata5

1

或者您可以與List comprehensions一起使用,並將您的代碼減少一行。 :

>>>[val for z in [(list_1[i], list_2[i]) for i in range(len(list_1)) ] for val in z] 
[0, 1, 1, 2, 0, 2, 0, 4, 1, 4, 1, 6, 0, 7, 1, 8, 1, 8, 0, 10] 
+0

「查看所有'i's」! –

+0

thx @AndrasDeak – AndreL