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

Вы можете использовать zip в питона и array.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

Смежные вопросы