我有一个值为 0 到 30 的列表。
我如何循环遍历这些值(在一个范围内)并添加偏移量?
因为这可能没有任何意义,我画了一个小图:
请您参考如下方法:
这处理环绕情况
def list_range(offset, length, l):
# this handles both negative offsets and offsets larger than list length
start = offset % len(l)
end = (start + length) % len(l)
if end > start:
return l[start:end]
return l[start:] + l[:end]
编辑:我们现在处理负索引情况。
编辑 2:交互式 shell 中的示例用法。
>>> l = range(30)
>>> list_range(15,10,l)
[15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
>>> list_range(25,10,l) # I'm guessing the 35 in the example was accidental
[25, 26, 27, 28, 29, 0, 1, 2, 3, 4]
>>> list_range(-8,10,l)
[12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
编辑 3:更新为忽略每个评论的 -8,10 大小写
编辑 4:我正在使用列表切片,因为我怀疑它们比循环数据更有效。我刚刚对此进行了测试,我的预感是正确的,它比循环列表的 mVChr 版本快大约 2 倍。然而,这可能是一个过早的优化,更多的 pythonic 答案(列表理解单行)在你的情况下可能更好
