python - Python 列表范围访问作为环形缓冲区
问题描述
我有一个 Python 列表,并且想构建范围循环列表。它看起来像一个环形缓冲区。所以,如果我有一个清单:
[[0], [1], [2], [3]]
我想得到:
[[0], [1], [2], [3]]
[[1], [2], [3], [4]]
[[2], [3], [4], [0]]
[[3], [4], [0], [1]]
[[4], [0], [1], [2]]
我可以自己做。但是在 Python 3 中有没有更好或更聪明的方法呢?
我试过的代码:
N = 5
d_list = [[_] for _ in range(N)]
for i in range(N):
b1 = i
e1 = i + N - 1
b2, e2 = 0, 0
if e1 >= N:
e2 = e1 - N
print(d_list[b1:e1] + d_list[b2:e2])
解决方案
使用collections.deque
androtate
怎么样?
import collections
N = 5
d = collections.deque(range(N))
for _ in range(N):
print(d)
d.rotate(1)
结果:
deque([0, 1, 2, 3, 4])
deque([4, 0, 1, 2, 3])
deque([3, 4, 0, 1, 2])
deque([2, 3, 4, 0, 1])
deque([1, 2, 3, 4, 0])
rotate
只是更改列表的开头,没有数据被复制/移动,所以它非常快。
笔记:
list
如果需要,您可以转换为- 我的例子是使用整数,而不是包含一个唯一整数的列表。如有必要,这可以很容易地进行调整。
推荐阅读
- java - 在spring boot中超时后终止处理请求
- javascript - 我需要如何将其转换为纯 javascript 或 jquery?
- scheme - 如何查找列表是否由方案中的有序完美正方形组成?
- c# - Process.Start() 在 UWP 中打开 exe 文件没有发生任何事情
- scala - 如何在不使用 RDD 的情况下将文本(.txt)文件写入数据帧并在控制台上打印
- reactjs - 如何将来自 AXIOS 的响应分配给处于功能组件状态的数组(React Hooks)
- html - 将包含多列的表格分成多页而不切断右侧的内容
- hibernate-6.x - Hibernate 逆向工程不会拉取 DB 约束细节
- cassandra - 使用 cassandra golang 进行并行全表扫描
- java - 是否可以在查询中添加数据?