首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从列表创建相等值的索引子列表

从列表创建相等值的索引子列表
EN

Stack Overflow用户
提问于 2018-12-04 23:24:21
回答 5查看 417关注 0票数 2

我正在尝试将一个整数列表拆分成相等整数的索引的子列表。因此,假设我有一个列表:

代码语言:javascript
运行
复制
original_list = [1,2,1,4,4,4,3,4,4,1,4,3,3]

期望的输出将是:

代码语言:javascript
运行
复制
indexes : [[0,2,9], [1], [6,11,12], [3,4,5,7,8,10]]
# corresponds to sublists: [[1,1,1] [2], [3,3,3], [4,4,4,4,4,4]]

我不知道该怎么做,因为大多数解决方案都要求您首先对原始列表进行排序,但在我的例子中,这会弄乱索引。Itertools或np.arrays由于这个原因对我没有帮助,因为它们只对顺序相等的元素进行分组。

有没有人知道这个问题的解决方案?我很想听你说!

EN

Stack Overflow用户

发布于 2018-12-04 23:37:16

您可以将collections.defaultdict用于一次性解决方案。然后,如果需要的话,可以使用sorted来按值对索引进行排序。

代码语言:javascript
运行
复制
original_list = [1,2,1,4,4,4,3,4,4,1,4,3,3]

from collections import defaultdict
from operator import itemgetter

dd = defaultdict(list)

for idx, value in enumerate(original_list):
    dd[value].append(idx)

keys, values = zip(*sorted(dd.items(), key=itemgetter(0)))

print(keys, values, sep='\n')

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

为了便于比较,dd的值在Python 3.6+中是按插入顺序排列的(在3.7+中是正式的,在3.6中作为CPython实现的详细信息):

代码语言:javascript
运行
复制
print(list(dd.values()))

[[0, 2, 9], [1], [3, 4, 5, 7, 8, 10], [6, 11, 12]]
票数 1
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53616179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档