Как найти дубликат в списке и выполнить различные вычисления для каждого найденного экземпляра дубликата? - PullRequest
1 голос
/ 27 февраля 2020
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]

Может ли кто-нибудь объяснить мне, как найти дубликаты, а также подсчитать количество экземпляров этих дубликатов, чтобы я мог выполнять различные вычисления для каждого новый экземпляр дубликата?

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Это измененная версия ответа @ 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]
1 голос
/ 27 февраля 2020

Я бы использовал словарь, чтобы отслеживать, какие значения были использованы, и количество раз.

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)

Надеюсь, это поможет!

...