我正在尝试创建一个函数,该函数针对列表的每个成员返回该成员的值及其两侧的值数。唯一的技巧是,它必须在列表的开头或结尾时“环绕”

例如:

a = [0,1,2,3,4,5,6,7,8,9]
myfunc(a,2) # 2 indicates 2 either side

[8,9,0,1,2]
[9,0,1,2,3]
[0,1,2,3,4]
...
...
[6,7,8,9,0]
[7,8,9,0,1]


我可以找出从索引2到7的处理方法:

def myfunc(vals, rnge):
    for i in range(0+rnge, len(vals)-rnge):
        print vals[i-rnge:i+rnge+1]


但是我想不出在需要包装时如何处理。

最佳答案

这是解决方案:

def defunc(vals, start, rnge):
    n = len(vals)
    new = []

    for i in xrange((start - rnge), (start + rnge)+ 1):
        new.append(vals[i%n])
    return new

def myfunc(vals, rnge):
    n = len(vals)
    for i in range(n):
        print defunc(vals,i,rnge)


我没有对列表进行切片以使逻辑更清晰。
我希望这能奏效

关于python - 如何对索引使用模块化算法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31366737/

10-10 18:36