gpt4 book ai didi

Python,将索引列表转换为切片

转载 作者:太空狗 更新时间:2023-10-30 01:59:50 26 4
gpt4 key购买 nike

所以我有一个索引列表,

[0, 1, 2, 3, 5, 7, 8, 10]

并想把它转换成这个,

[[0, 3], [5], [7, 8], [10]]

这将在大量索引上运行。

此外,这在技术上不适用于 python 中的切片,与给定单个 ID 相比,我使用的工具在给定范围时速度更快。

该模式基于在一个范围内,就像 python 中的切片一样。所以在示例中,1 和 2 被删除,因为它们已经包含在 0 到 3 的范围内。5 需要单独访问,因为它不在范围内,等等。当有大量 id 时,这更有用包含在 [0, 5000] 等范围内。

最佳答案

既然您希望代码速度快,我就不会尝试太花哨。一个直接的方法应该表现得很好:

a = [0, 1, 2, 3, 5, 7, 8, 10]
it = iter(a)
start = next(it)
slices = []
for i, x in enumerate(it):
if x - a[i] != 1:
end = a[i]
if start == end:
slices.append([start])
else:
slices.append([start, end])
start = x
if a[-1] == start:
slices.append([start])
else:
slices.append([start, a[-1]])

不可否认,这看起来不太好,但我希望我能想到的更好的解决方案表现更差。 (我没有做基准测试。)

这是稍微好一点但速度较慢的解决方案:

from itertools import groupby
a = [0, 1, 2, 3, 5, 7, 8, 10]
slices = []
for key, it in groupby(enumerate(a), lambda x: x[1] - x[0]):
indices = [y for x, y in it]
if len(indices) == 1:
slices.append([indices[0]])
else:
slices.append([indices[0], indices[-1]])

关于Python,将索引列表转换为切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10987777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com