考虑以下简单的python代码
>>> L = range(3)
>>> L
[0, 1, 2]
我们可以按如下方式获取此数组的切片:
>>> L[1:3]
[1, 2]
有没有办法绕过上面的数组转移到左边
[1, 2, 0]
只需使用切片操作?
答案 0 :(得分:17)
答案 1 :(得分:2)
左:
L[:1], L[1:] = L[-1:], L[:-1]
右:
L[-1:], L[:-1] = L[:1], L[1:]
答案 2 :(得分:1)
在我看来,没有办法,除非你同意剪切和连接如上所示的列表。 要进行描述的包装,您需要更改开始和结束索引。
没有这些组合可以提供尾部项目后跟初始项目的包装点。所以整个事情都无法创造。
存在许多变通方法。如果您需要顺序访问(例如,在循环中),请参阅上面的答案,另请参阅itertools.islice
和.chain
以获取无复制顺序方法。
答案 3 :(得分:0)
如果您对精确的切片语法没有过多的兴趣,则可以编写一个函数以产生所需的输出,包括包装行为。
例如,像这样:
def wrapping_slice(lst, *args):
return [lst[i%len(lst)] for i in range(*args)]
示例输出:
>>> L = range(3)
>>> wrapping_slice(L, 1, 4)
[1, 2, 0]
>>> wrapping_slice(L, -1, 4)
[2, 0, 1, 2, 0]
>>> wrapping_slice(L, -1, 4, 2)
[2, 1, 0]
注意事项:您不能在slice assignment的左侧使用此提示。