【问题标题】:break links into chunks with a sliding window使用滑动窗口将链接分成块
【发布时间】:2020-05-19 17:57:29
【问题描述】:

所以,我试图将列表分成 4 块,但需要注意的是。需要注意的是,我希望列表获取前一个块的最后 2 个元素并将其与接下来的 2 个元素连接起来以产生以下输出:

例如:

Input: text=['one','two','three','four','five','six','seven','eight']
Output: ['one two three four','three four five six', 'five six seven eight']

现在,我有这个:

from itertools import islice

text=['one','two','three','four','five','six','seven','eight']

def window(seq, n=2):
    "Returns a sliding window (of width n) over data from the iterable"
    "   s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ...                   "
    it = iter(seq)
    result = tuple(islice(it, n))
    if len(result) == n:
        yield result
    for elem in it:
        result = result[1:] + (elem,)
        yield result

processed = [' '.join(i) for i in window(text,4)]
print(processed)
Output:
['one two three four', 'two three four five', 'three four five six', 'four five six seven', 'five six seven eight']

同样,我的理想输出是:

['one two three four','three four five six', 'five six seven eight']

【问题讨论】:

    标签: python python-3.x algorithm iterator sliding-window


    【解决方案1】:

    这样的?

    data = 'i ii iii iv v vi vii viii'.split()
    
    print([' '.join(data[i-2:i+2]) for i in range(2, len(data), 2)])
    

    【讨论】:

    • 为什么不对range使用步长2,那么你可以在结果上避免[::2]...
    • 如果您在列表中再添加一个项目,这将不成立,因为最后一个块将只有 3 个项目。
    • 对于我的 Python 知识,我不确定我是否会使用“当然”……仍然是个新手……
    • @MarsilinouZaky 我不清楚对一个不能被 4 整除的基数的列表进行 4 分块应该做什么。鉴于规范,这至少是一种明智的解决方案:-)
    猜你喜欢
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 2021-10-29
    • 2018-05-10
    • 2014-09-09
    • 1970-01-01
    • 2016-01-18
    相关资源
    最近更新 更多