Python:两个列表迭代内部for循环索引

时间:2015-10-20 15:42:33

标签: python 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],它们具有相同数量的元素。我试图遍历这些列表,以便在4个单独的值中使用,这些值将成为函数的一部分。

我到目前为止:

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]

3 个答案:

答案 0 :(得分:2)

您可以在python中使用zip,在numpy中使用array.T方法来创建新的列数组:

>>> 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]])

答案 1 :(得分:2)

我认为它似乎更具可读性:

@POST
@Path("/names")
public void getNames(@QueryParam("name") final List<String> names) {

}

答案 2 :(得分: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]