Python 生成一个列表,当遍历该列表时,其元素对应于不同列表的特定值的计数

Python 生成一个列表,当遍历该列表时,其元素对应于不同列表的特定值的计数,python,python-3.x,list,Python,Python 3.x,List,假设我有一个0和1的列表:example_list={0,1,0,1,1} 然后,我通过以下命令创建仅包含零和一的子列表: zero_list = len[i for i in example_list if i == 0] one_list = len[i for i in example_list if i == 1] 这就给出了zero_list={0,0}和one_list={1,1,1} 我想做的是将zero\u list和one\u list中的0和1的索引分别映射到一个长度相同的

假设我有一个0和1的列表:
example_list={0,1,0,1,1}

然后,我通过以下命令创建仅包含零和一的子列表:

zero_list = len[i for i in example_list if i == 0]
one_list = len[i for i in example_list if i == 1]
这就给出了
zero_list={0,0}
one_list={1,1,1}

我想做的是将
zero\u list
one\u list
中的0和1的索引分别映射到一个长度相同的新列表
example\u list
。也就是说,我想得到:

new_list = {0, 0, 1, 1, 2}
有人知道如何处理这个问题吗?

您可以在遍历列表时使用类似于计数器的字典:

from collections import defaultdict
example_list = [0, 1, 0, 1, 1]
encountered = defaultdict(int)     # returns 0 as value for all keys that aren't set.

res = []
for item in example_list:
    res.append(encountered[item])  # append the number of times this number was seen
    encountered[item] += 1         # increment the times

>>> res
[0, 0, 1, 1, 2]
或者,如果您希望将其作为发电机功能:

def cumulative_count(it):
    cnts = defaultdict(int)
    for item in it:
        yield cnts[item]
        cnts[item] += 1

>>> list(cumulative_count([0, 1, 0, 1, 1]))
[0, 0, 1, 1, 2]

请展示你试过的东西。你能提供一份报告吗?这个问题目前涉及面太广了。对不起,克里斯蒂安,我正在努力澄清描述之外的问题。是的,我同意问题标题太宽泛,将进行编辑。好的,谢谢@T.Ray Jr.,谢谢。