使用python中的zip功能移动窗口

时间:2018-07-03 11:27:55

标签: python zip iteration

我缺少一些非常简单的东西。当我使用zip函数迭代5个元素

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 None None”结束。我想这些是一些基本知识,但是我坚持了下来。任何提示都非常感谢!

2 个答案:

答案 0 :(得分:1)

当您指定list[:-2]list[2:]时,您必须再添加2个元素以使新列表的长度与list相同

顺便说一下,变量名不要与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

答案 1 :(得分:1)

您的列表长度不同

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