首页 > 解决方案 > 从列表中选择每第 n 个值并替换它们之间的值

问题描述

我在 python 中有一个列表,其中包含一些值: List = [0,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8, 9, ...,n] 我想做的是选择每第 n 个值,并用零填充它们之间的距离。这样我最终得到以下列表:Result = [0,0,0,0,5,0,0,0,0,0,0,0,0,5,0,0,0,0, .. .,n] 注意:并不总是 5。

我所做的:编写类似窗口函数的东西并遍历列表。

def window(x):
    window = []
    for ii in range(len(x)):
        mask = [0,1,2,3,None,5,6,7,8]
        select = [x is None for x in mask]
        center = list(itertools.compress(x[ii],select))
        window.append(center)
        for ii in range(0,4):
            center.insert(0,"0")
            center.append("0")
    return window

此函数有效,但在第一次迭代后如何停止,我不知道为什么。

标签: pythonlist

解决方案


您可以将每个第 n 个项目存储在一个单独的变量中,然后将整个列表分配给填充值,然后填充存储的那些(这不会创建原始列表的副本):

import itertools as it

l = list(range(20))
tmp = l[::5]
l[:] = it.repeat(0, len(l))
l[::5] = tmp

如果您可以制作副本,那么您还可以使用以下内容:

l = list(range(20))
l = [0 if i % 5 else x for i, x in enumerate(l)]

推荐阅读