Код работает медленно, Python

код должен считать кол-во одинаковых пар, затем отталкиваясь от этого составить кол-во параллелограммов, которые мы можем сделать из пар (2 пары - 1 параллелограмм) это задание из пробного тура, сдал ее и на тесте 60 (их всего 100) выдало ошибку - Превышено максимальное время работы (>1.000с) Как исправить код, чтобы он работал быстрее?

n = int(input()) # он тут не нужен но для задачи нужен был, но он ничего в коде не делает
a = [int(a) for a in input().split()]  # создает список из n-чисел

count = 0 
counter = 0

# цикл для счета одинаковых пар
for j in range(len(a)): 
    if a[j] != -1:
        for jj in range(j + 1, len(a)):
            if a[j] == a[jj]:
                count += 1
                a[j] = -1 
                a[jj] = -1
                break
counter=count//2 # считает кол-во параллелограммов

print(counter)

Ответы (3 шт):

Автор решения: Денис Матвеев

Посмотрите в сторону словарей (а лучше defaultdict), тогда не придётся использовать вложенные циклы для подсчёта количества пар.

from collections import defaultdict
    
a = [int(x) for x in str(input())]

counts = defaultdict(int)
for number in a:
    counts[number] += 1


pairs = 0
for count in counts.values():
    pairs += count // 2

print(pairs)
→ Ссылка
Автор решения: Imas
a = [int(a) for a in input().split()]  # создает список из n-чисел

# Используем словарь для подсчета количества вхождений каждого элемента
element_count = {}
for num in a:
    if num in element_count:
        element_count[num] += 1
    else:
        element_count[num] = 1

# Считаем количество одинаковых пар
count = 0
for value in element_count.values():
    count += value // 2

# Считаем количество параллелограммов
counter = count // 2

print(counter)
→ Ссылка
Автор решения: Stanislav Volodarskiy

collections.Counter считает количества одинаковых элементов в последовательности.

Затем суммируются счётчики делённые пополам с остатком. Это число пар равных элементов. Его ещё раз делим пополам с остатком чтобы получить число параллелограммов.

import collections

input()
c = collections.Counter(input().split())
print(sum(v // 2 for v in c.values()) // 2)
→ Ссылка