2015-10-20 94 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