我有一个整数列表如下:
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']
