Перемещение окна с функцией почтового индекса в Python - PullRequest
0 голосов
/ 03 июля 2018

Мне не хватает чего-то очень простого. Когда я перебираю 5 элементов с помощью функции zip

list = [1,2,3,4,5,6,7]

for i2,i1,i,i11,i22 in zip([None] + list[:-2], [None] + list[:-1], list, list[1:] + [None], list[2:] + [None]):
    print i2,i1,i,i11,i22

Я получаю результат:

None None 1 2 3
1 1 2 3 4
2 2 3 4 5
3 3 4 5 6
4 4 5 6 7
5 5 6 7 None

Так что я не уверен, почему элемент [: -2] дает мне фактически элемент [: -1]. А также, почему он останавливается перед последней строкой, я бы предположил, что итерация заканчивается "5 6 7 Нет Нет". Я предполагаю, что это некоторые основы, но я застрял. Любые советы очень ценятся!

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Ваши списки не имеют одинаковую длину

list = [1,2,3,4,5,6,7]


[print (i2,i1,i,i11,i22) for i2,i1,i,i11,i22 
 in zip([None,None]+ list[:-2], 
        [None] + list[:-1],
        list,
        list[1:] + [None],
        list[2:] + [None,None])]
0 голосов
/ 03 июля 2018

Когда вы указываете list[:-2] или list[2:], вам нужно добавить еще 2 элемента, чтобы длина нового списка была такой же, как у списка

Кстати, имя переменной не совпадает с list. Переименуйте его в что-то как lst

lst = [1,2,3,4,5,6,7]
for i2,i1,i,i11,i22 in zip([None, None] + lst[:-2], [None] + lst[:-1], lst, lst[1:] + [None], lst[2:] + [None, None]):
    print i2,i1,i,i11,i22

Выход:

None None 1 2 3
None 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 None
5 6 7 None None
...