从元组的分组列表中列出相同元素的所有索引

Make a list of all indexes of the same element from a grouped list of tuples

我正在制作一个将像素艺术变成体素艺术的脚本。我有一个图像并创建了每个像素的 RGBA 值的分组列表作为元组

RGBA_list = list(img.pixels)
    
gl = [RGBA_list[ipx] for ipx in range(0, len(RGBA_list), 4)]

这是针对像素艺术的,因此许多颜色完全相同,并且有少量独特的颜色。有没有办法获取每种颜色的多个索引列表?

或者更好的措辞:获取图像中的每种颜色,然后针对每种颜色从具有该颜色的分组列表中获取索引列表

您有一个包含重复值的列表,您希望将其转换为值->list_of_index_where_it_occurs 映射。您可以使用 defaultdict。 (另一种方法是使用 setdefault,但 defaultdict 使它更容易和更清晰。)
请看下面的例子:

>>> info_list = [random.randint(1,5) for x in range(100)]
>>> info_list
[4, 5, 2, 2, 4, 3, 3, 1, 2, 4, 4, 2, 3, 1, 2, 3, 1, 4, 4, 2, 1, 1, 3, 3, 2, 1, 4, 4, 1, 5, 2, 2, 3, 5, 1, 4, 1, 4, 1, 3, 3, 2, 3, 2, 5, 4, 5, 3, 4, 4, 3, 2, 3, 2, 1, 2, 2, 4, 4, 1, 5, 2, 1, 1, 2, 3, 4, 5, 3, 4, 4, 3, 4, 1, 3, 4, 2, 1, 5, 3, 4, 3, 3, 5, 2, 2, 4, 5, 2, 2, 1, 5, 4, 5, 5, 1, 5, 3, 2, 2]

>>> from collections import defaultdict
>>> info_dict = defaultdict(list)
>>> for i, x in enumerate(info_list):
...     info_dict[x].append(i)
... 
>>> info_dict.keys()
dict_keys([4, 5, 2, 3, 1])
>>> info_dict[1]
[7, 13, 16, 20, 21, 25, 28, 34, 36, 38, 54, 59, 62, 63, 73, 77, 90, 95]