如何在列表中找到重复项,并对找到的每个重复实例执行不同的计算


a_list = [1, 2, 3, 1, 2, 3, 1, 2, 3]

我想对a_list进行迭代并查找重复项。如果发现重复项,我想对该重复项进行计算。如果发现同一实例的另一个副本,则应执行不同的计算。

例如:

开始迭代a_list:

1, 2, 3, 1 [Instance of duplicate 1 found - Perform 1+1 on instance]

继续迭代。。。

1, 2, 3, 1, 2 [Instance of duplicate 2 found - Perform 2+2 on instance]

继续迭代。。。

1, 2, 3, 1, 2, 3 [Instance of duplicate 3 found - Perform 3+3 on instance]

继续迭代。。。

1, 2, 3, 1, 2, 3, 1 [Second instance of duplicate 1 found - Perform 1+1+1 on instance]

继续迭代。。。

1, 2, 3, 1, 2, 3, 1, 2 [Second instance of duplicate 2 found - Perform 2+2+2 on instance]

继续迭代。。。

1, 2, 3, 1, 2, 3, 1, 2, 3 [Second instance of duplicate 3 found - Perform 3+3+3 on instance]

完成后,将创建一个包含所有计算的新列表:

new_list = [1, 2, 3, 2, 4, 6, 3, 6, 9]

有人能向我解释一下如何查找重复项以及计算这些重复项的实例吗?这样我就可以对每个新的重复项实例执行不同的计算了?

我会使用字典来跟踪使用了哪些值以及使用次数。

a_list = [1, 2, 3, 1, 2, 3, 1, 2, 3]
tracking_dict = {}
out_list = []
for item in a_list:
# checks if item has been seen before
if item in tracking_dict:
# add the number as many times as it has been seen
out_list.append(item + item * tracking_dict[item])
# since you've seen the number, increase the count by 1
tracking_dict[item] += 1
else:
# add it to the output list as-is
out_list.append(item)
# the item is new to this list
tracking_dict[item] = 1
print(out_list)

希望这能有所帮助!

这是@Alexander为粉丝collections.defauldict提供的答案的调整版本。

import collections as colls
a_list = [1, 2, 3, 1, 2, 3, 1, 2, 3]
d = colls.defaultdict(int)
result = []
for val in a_list:
d[val] += val
result.append(d[val])
print(result)

输出:

[1, 2, 3, 2, 4, 6, 3, 6, 9]

最新更新