Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何访问';窗口';每次迭代中列表中元素的数量?_Python_List - Fatal编程技术网

Python 如何访问';窗口';每次迭代中列表中元素的数量?

Python 如何访问';窗口';每次迭代中列表中元素的数量?,python,list,Python,List,假设我有一个列表[a,b,c,d,e],我想创建一个元组列表[(a,b,c,c),(b,c,d),(c,d,e)]。是否可以不使用数组索引作为循环变量?这样做的最佳方式是什么 zip(li, li[1:],li[2:]) 这将元素拉到一起。每个迭代对应于li[i]、li[i+1]、li[i+2],因此解决了原始问题 这将元素拉到一起。每个迭代对应于li[i]、li[i+1]、li[i+2],因此解决了原始问题。不确定这是否满足您的约束,但它应该这样做 the_list = [1,2,3,4,5

假设我有一个列表[a,b,c,d,e],我想创建一个元组列表[(a,b,c,c),(b,c,d),(c,d,e)]。是否可以不使用数组索引作为循环变量?这样做的最佳方式是什么

zip(li, li[1:],li[2:])
这将元素拉到一起。每个迭代对应于li[i]、li[i+1]、li[i+2],因此解决了原始问题


这将元素拉到一起。每个迭代对应于li[i]、li[i+1]、li[i+2],因此解决了原始问题。

不确定这是否满足您的约束,但它应该这样做

the_list = [1,2,3,4,5,6,7]
tuple_size = 3
tuple_list = [tuple(the_list[i-tuple_size:i]) for i in range(tuple_size, len(the_list))]

不确定这是否满足您的约束,但它应该满足

the_list = [1,2,3,4,5,6,7]
tuple_size = 3
tuple_list = [tuple(the_list[i-tuple_size:i]) for i in range(tuple_size, len(the_list))]

当我想这样做的时候,我会保留这个方便的函数

import itertools

def nwise(it, n, wrapping=False):
    # nwise('ABCD', 2) --> AB BC CD
    # nwise('ABCDEF', 3) --> ABC BCD CDE DEF
    # nwise('ABCD', 2, wrapping=True) --> AB BC CD DA
    # nwise('ABCD', 3, wrapping=True) --> ABC BCD CDA DAB
    copies = itertools.tee(it, n)
    columns = []
    for index, copy in enumerate(copies):
        front = list(itertools.islice(copy, 0, index))
        if wrapping:
            columns.append(itertools.chain(copy, front))
        else:
            columns.append(copy)
    return itertools.izip(*columns)

当我想这样做的时候,我会保留这个方便的函数

import itertools

def nwise(it, n, wrapping=False):
    # nwise('ABCD', 2) --> AB BC CD
    # nwise('ABCDEF', 3) --> ABC BCD CDE DEF
    # nwise('ABCD', 2, wrapping=True) --> AB BC CD DA
    # nwise('ABCD', 3, wrapping=True) --> ABC BCD CDA DAB
    copies = itertools.tee(it, n)
    columns = []
    for index, copy in enumerate(copies):
        front = list(itertools.islice(copy, 0, index))
        if wrapping:
            columns.append(itertools.chain(copy, front))
        else:
            columns.append(copy)
    return itertools.izip(*columns)

这会一次又一次地复制列表,对于迭代器/生成器而不是列表不起作用。它还可以在Python2上立即创建所有窗口,占用窗口的宽度*列表内存的长度。它还将立即在Python 2上创建所有窗口,占用窗口的宽度*列表内存的长度。如果不使用数组索引作为循环变量,这是个问题。如果不使用数组索引作为循环变量,这是个问题。