Skip to main content
 首页 » 编程设计

python之"Compressing"整数列表

2025年05月04日15exmyth

我有一个整数列表如下:

my_list = [2,2,2,2,3,4,2,2,4,4,3] 

我想要的是将其作为列表 os 字符串、索引和“压缩”,也就是说,每个元素都由其在列表中的位置指示,每个连续的重复元素指示为一个范围,如下所示:

my_new_list = ['0-3,2', '4,3', '5,4', '6-7,2', '8-9,4', '10,3'] 

编辑:预期的输出应该表明列表元素 0 到 3 有数字 2,元素 3,数字 3,元素 5,数字 4,元素 6 和 7,数字 2,元素 8 和 9,数字4,和元素 10,编号 3。

编辑 2:输出列表不需要(实际上不能)是整数列表,而是字符串列表。

我可以找到许多从列表中查找(和删除)重复元素的示例,但没有任何符合我需要的内容。

有人可以指出相关示例或建议解决此问题的算法吗?

提前致谢!

请您参考如下方法:

像大多数涉及级联连续重复的问题一样,您仍然可以使用 groupby()为了这。只需按每个索引处的值对索引进行分组。

values = [2,2,2,2,3,4,2,2,4,4,3] 
result = [] 
 
for key, group in itertools.groupby(range(len(values)), values.__getitem__): 
    indices = list(group) 
 
    if len(indices) > 1: 
        result.append('{}-{},{}'.format(indices[0], indices[-1], key)) 
    else: 
        result.append('{},{}'.format(indices[0], key)) 
 
print(result) 

输出:

['0-3,2', '4,3', '5,4', '6-7,2', '8-9,4', '10,3']