[英]Wrapping around a list as a slice operation
考虑以下简单的python代码
>>> L = range(3)
>>> L
[0, 1, 2]
我们可以对这个数组进行切片,如下所示:
>>> L[1:3]
[1, 2]
有没有办法通过向左移动来环绕上面的数组
[1, 2, 0]
通过简单地使用切片操作?
剩下:
L[:1], L[1:] = L[-1:], L[:-1]
对:
L[-1:], L[:-1] = L[:1], L[1:]
在我看来,没有办法,除非您同意如上所示剪切和连接列表。 要进行您描述的包装,您需要更改起始索引和结束索引。
这些的组合都不能提供尾部项目后跟初始项目的包装点。 所以不能创建整个事物。
存在多种解决方法。 如果您需要顺序访问(例如在循环中),请参阅上面的答案,另请参阅itertools.islice
和.chain
以了解无复制顺序方法。
如果您不太依赖于精确的切片语法,您可以编写一个函数来产生所需的输出,包括包装行为。
例如,像这样:
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]
警告:您不能在切片分配的左侧使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.