python - 将索引列表变成列表列表

标签 python list

我正在寻找一种 Python 魔术方法来打包那种索引列表

[0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 4, 4]

进入这个,每个索引分组在一个特定的列表中:

[[0, 1, 2, 3, 4], [5, 6, 7], [8, 9], [10], [11, 12, 13]]

我已经用列表推导加上如下所示的附加循环完成了它,但我觉得有一个 Python 单行代码可以做到这一点。我正在处理有时会达到 10000 多个项目的列表,因此性能很重要。

li = [0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 4, 4]

result = [[] for _ in xrange(max(li)+1)]

for i in xrange(len(li)):
    result[li[i]].append(i)

最佳答案

您可以使用 itertools.groupby 对值进行分组。然后根据每组的长度计算索引,并保留该组起始索引的运行计数。

from itertools import groupby
def index_list(l):
    temp = 0
    index_list = []
    for key, group in groupby(l):
        items = len(list(group))
        index_list.append([i+temp for i in range(items)])
        temp += items
    return index_list

例子

>>> l = [0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 4, 4]
>>> index_list(l)
[[0, 1, 2, 3, 4], [5, 6, 7], [8, 9], [10], [11, 12, 13]]

关于python - 将索引列表变成列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31001446/

相关文章:

python - 如何在 python flask 中加载图像?

python - 从python中的嵌套字典创建层次树

python - 计算 Python 列表中出现次数的最快方法

r - 在 R 中使用 mutate 创建一个列表变量

c# - C++ Vector 类似于 C# 中的类

python - 在 python 列表中搜索空列表不准确吗?

python - 我想知道当我们只想打印 pandas 中的特定列时如何实现

c# - 从可枚举的内容构建 C# 列表

python - 使用 virtualenvwrapper 重命名环境

python - 如何使用 Python elementtree 模块进行元素树解析?