2016-03-28 4 views
1

У меня есть список, который всегда будет содержать четное число элементов , и я хочу перебрать этот список, чтобы создать новый список, содержащий списки из каждых двух последовательных номеров в списке.Пара последовательных элементов в списке во время итерации

Например:

first_list = [1,2,3,4,5,6,7,8] 
second_list = [[1,2], [3,4], [5,6], [7,8]] 

Когда я итерацию по списку, я не могу понять, как выбрать последовательные пары. Я пробовал миллион вариантов, и это самое близкое, что я пришел.

first_list = [1,2,3,4,5,6,7,8]  
second_list = [] 

pairs = 1 

for item in range(len(first_list) - pairs): 
    second_list.append([firs_list[item],first_list[item + pairs]]) 
print second list 

[[1, 5], [5, 7], [7, 6], [6, 2], [2, 3], [3, 4], [4, 8]] 

Есть ли способ, которым у меня есть цикл for итерации по всем другим элементам?

+0

^Главный ответ - общее решение, которое будет работать аккуратно для вашей проблемы. (Просто установите или введите код жесткого кода n = 2 и используйте версию для понимания списка.) –

ответ

0

Вы можете комбинировать функции от модуля itertools. Без внешней map возвращает список кортежей и map преобразует его в список списков:

>>> from itertools import cycle, compress, izip 
>>> 
>>> lst = [1,2,3,4,5,6,7,8] 
>>> map(list, izip(compress(lst, cycle([1, 0])), compress(lst, cycle([0, 1])))) 
[[1, 2], [3, 4], [5, 6], [7, 8]] 
1

Этот код должен сделать это:

first_list = [1,2,3,4,5,6,7,8]  
second_list = [] 
for i in range(0,len(first_list)-1,2): 
    if first_list[i]+1==first_list[i+1]: 
     second_list.append([first_list[i],first_list[i+1]]) 
print second_list 

выход:

[[1, 2], [3, 4], [5, 6], [7, 8]] 
+1

Это интересно, но это другой результат, чем запросил OP. Обратите внимание, что пары перекрываются ([1, ** 2 **], [** 2 **, 3]), а оригиналы - нет. –

+0

Спасибо, спасибо, что – denis

+0

Выглядит хорошо. На самом деле, это единственный ответ, который я выберу из-за вашего оператора if. Я собирался сказать, что это не нужно, но перечитывая сообщение, я думаю, что вы единственный человек, который заметил (и правильно выполнил) это требование! (Возможно, вы захотите поставить «или» чек в случае, если они находятся в обратном порядке, например '(7, 6)' хотя.) –

0

You мы почти там. Вам нужно было использовать больше аргументов для диапазона.

Простое исправление:

for item in range(0, len(first_list) - 1, 2): 
    second_list.append([first_list[item],first_list[item + 1]]) 
print second_list 

Аргументы для range являются range(start, stop[, step]) и сказать ему, чтобы начать с нуля до длины-1 и использовать шаг двух.

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