相关疑难解决方法(0)

滚动或滑动窗口迭代器?

我需要一个可在序列/迭代器/生成器上迭代的滚动窗口(也称为滑动窗口).默认的Python迭代可以被认为是一种特殊情况,窗口长度为1.我目前正在使用以下代码.有没有人有更多的Pythonic,更简洁,或更有效的方法来做到这一点?

def rolling_window(seq, window_size):
    it = iter(seq)
    win = [it.next() for cnt in xrange(window_size)] # First window
    yield win
    for e in it: # Subsequent windows
        win[:-1] = win[1:]
        win[-1] = e
        yield win

if __name__=="__main__":
    for w in rolling_window(xrange(6), 3):
        print w

"""Example output:

   [0, 1, 2]
   [1, 2, 3]
   [2, 3, 4]
   [3, 4, 5]
"""
Run Code Online (Sandbox Code Playgroud)

python algorithm

142
推荐指数
10
解决办法
8万
查看次数

如何在循环列表中循环,同时向前和向后窥视当前元素?

使用以下示例列表: L = ['a','b','c','d']

我想实现以下输出:

>>> a d b
>>> b a c
>>> c b d
>>> d c a
Run Code Online (Sandbox Code Playgroud)

伪代码将是:

for e in L:
    print(e, letter_before_e, letter_after_e
Run Code Online (Sandbox Code Playgroud)

python

5
推荐指数
2
解决办法
1483
查看次数

使用Python 2.7.1中的itertools,yield和iter()生成带有滑动窗口的字符串列表?

我正在尝试在Python中生成滑动窗口函数.我想出了如何做到这一点但并非所有内部功能.itertools,yield和iter()对我来说都是全新的.

我想输入

a='abcdefg'
b=window(a,3)
print b
['abc','bcd','cde','def','efg']
Run Code Online (Sandbox Code Playgroud)

我得到它的方式是

def window(fseq, window_size=5):
    import itertools
    tentative=[]
    final=[]
    iteration=iter(fseq)
    value=tuple(itertools.islice(iteration,window_size))
    if len(value) == window_size:
        yield value
    for element in iteration:
        value = value[1:] + (element,)
        yield value

a='abcdefg'
result=window(a)
list1=[]
for k in result:
    list1.append(k)
list2=[]   
for j in list1:
    tentative=''.join(j)
    list2.append(tentative)
print list2
Run Code Online (Sandbox Code Playgroud)

基本上我很困惑的是如何使用函数内部函数的最终值?

这是我的函数代码

def window(fseq, window_size=5):
    import itertools
    tentative=[]
    final=[]
    iteration=iter(fseq)
    value=tuple(itertools.islice(iteration,window_size))
    if len(value) == window_size:
        yield value
    for element in iteration:
        value = value[1:] + (element,)
        yield value
    for …
Run Code Online (Sandbox Code Playgroud)

python string loops window sliding

4
推荐指数
2
解决办法
8033
查看次数

列表上环绕运行窗口

我希望使用“滑动窗口”将列表拆分为相同大小的块,但我不想在末尾截断列表,而是想环绕,以便最终的块可以分布在列表的开头和结尾。

例如,给定一个列表:

l = [1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

我希望生成大小为 n=3 的块,如下所示:

[1, 2, 3], [4, 5, 6]
[2, 3, 4], [5, 6, 1]
[3, 4, 5], [6, 1, 2]
Run Code Online (Sandbox Code Playgroud)

或者,具有大小为 n=2 的块的同一列表应按如下方式拆分:

[1, 2], [3, 4], [5, 6]
[2, 3], [4, 5], [6, 1]
Run Code Online (Sandbox Code Playgroud)

该列表可能不会被均匀地划分为 n 个子列表(例如,如果原始列表的长度为 7 并且 n=3 - 或除 7 或 1 之外的任何值)。与通常情况一样,舍入值len(l) / n可用于确定分割大小。

这篇文章是相关的,尽管它没有按照我的需要进行环绕。我已经尝试过但没有成功任何有用的东西。任何建议将非常受欢迎!

python list

2
推荐指数
1
解决办法
244
查看次数

标签 统计

python ×4

algorithm ×1

list ×1

loops ×1

sliding ×1

string ×1

window ×1