Python 生成一个列表,当遍历该列表时,其元素对应于不同列表的特定值的计数
假设我有一个0和1的列表: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的索引分别映射到一个长度相同的
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.,谢谢。