如何基于python中的另一个列表构造分组项列表?

如何基于python中的另一个列表构造分组项列表?,python,Python,可能重复: 我有一个列表,我想创建另一个列表,它将包含基于一个滑动窗口参数和每个组的大小的第一个列表项的连续组。i、 e如果参数: a = ["a" ,"b" ,"c" ,"d" ,"e" ,"f"] 滑动窗=1,尺寸=2 那么我想要b作为: b= [(a,b),(b,c),(c,d),(d,e),(e,f)] 滑动窗口用于确定下一个元组的索引。每次列表都会被1遍历。即:如果滑动窗口为2,则我会: b=[(a,b)、(c,d)、(e,f)] 我正在寻找一种类似蟒蛇的方法来实现这一点。来自:

可能重复:

我有一个列表,我想创建另一个列表,它将包含基于一个滑动窗口参数和每个组的大小的第一个列表项的连续组。i、 e如果参数:

a = ["a" ,"b" ,"c" ,"d" ,"e" ,"f"]
滑动窗=1,尺寸=2 那么我想要b作为:

b= [(a,b),(b,c),(c,d),(d,e),(e,f)]
滑动窗口用于确定下一个元组的索引。每次列表都会被1遍历。即:如果滑动窗口为2,则我会: b=[(a,b)、(c,d)、(e,f)]

我正在寻找一种类似蟒蛇的方法来实现这一点。

来自:

:p时间它说:

In [58]: timeit pairwise(xrange(1000))
100000 loops, best of 3: 4.6 us per loop
从:

:p时间它说:

In [58]: timeit pairwise(xrange(1000))
100000 loops, best of 3: 4.6 us per loop

这是一种方式:

def group(l, window, size):
    return [l[index:index + size] for index in xrange(0, len(l) - 1, window)]
这是一种方法:

def group(l, window, size):
    return [l[index:index + size] for index in xrange(0, len(l) - 1, window)]

您可以这样尝试:

def slice(initial_list, length):
    return [ initial_list[i:i+length] for i in xrange(len(initial_list)-1)]
这将使:

a = ["a" ,"b" ,"c" ,"d" ,"e" ,"f"]
print slice(a, 2)
>>> [['a', 'b'], ['b', 'c'], ['c', 'd'], ['d', 'e'], ['e', 'f']]

您可以这样尝试:

def slice(initial_list, length):
    return [ initial_list[i:i+length] for i in xrange(len(initial_list)-1)]
这将使:

a = ["a" ,"b" ,"c" ,"d" ,"e" ,"f"]
print slice(a, 2)
>>> [['a', 'b'], ['b', 'c'], ['c', 'd'], ['d', 'e'], ['e', 'f']]

这里是不使用itertools而建议使用@Secator的同一个

i = iter(a)
next(i)
result = zip(a,i)

这里是不使用itertools而建议使用@Secator的同一个

i = iter(a)
next(i)
result = zip(a,i)


一段丑陋的代码,每次都保存索引,直到第一个循环中用于构造第一个元组的大小增加,然后根据窗口大小增加初始索引,依此类推。map和lambda会让它更漂亮,我猜每次索引时都会有一段难看的代码,在第一个循环中不断增加大小以构造第一个元组,然后根据窗口大小增加初始索引,依此类推。地图和lambda会让它变得更漂亮,我猜这对
滑动窗口=2
大小=4
是怎么回事?你说的滑动窗口是什么意思?我将其固定为使用
n
作为大小。我为滑动窗口编辑了我的答案。您似乎没有足够仔细地阅读该问题。@FelixKling关于滑动窗口的信息在我写此答案时不在问题中……这对
滑动窗口=2
大小=4
如何工作?您的意思是什么滑动窗口?我将其固定为使用
n
作为大小。我为滑动窗口编辑了我的答案。您似乎没有足够仔细地阅读该问题。@FelixKling关于滑动窗口的信息不在我写此答案时的问题中…此选项如何处理不同的滑动窗口和大小值?此选项如何处理不同的滑动窗口窗口和大小值?虽然您可能希望将其作为生成器而不是理解列表,因为您使用的是xrange。@e-satis:这是一个选项,但我只是不想在内存中有一个不需要的数字列表。不,我的意思是将[]转换为()。因此,除非用户明确要求,否则您的内存中根本没有列表。尽管您可能希望将其作为生成器而不是理解列表,因为您使用的是xrange。@e-satis:这是一个选项,但我只是不希望在内存中有一个不需要的数字列表。不,我的意思是将[]转换为()。因此,除非用户明确要求,否则内存中根本没有列表。