Python

Дан список чисел. Нужно посчитать количество их "пар" (т.е. "1 1 1 1 1" = 10, "1 2 3 2 3" = 2 и т.д.) (Python)

При вводе пяти единиц в ответе "0". Где ошибка в коде?a = [int(i) for i in input().split()]
a.sort()
c = 0
b = 0
for i in range(0, len(a)):
if a[i] == a[i-1]:
c += 1
elif a[i] != a[i-1]:
b += c
c = 0
print(b)
При i == 0 обращение к a[i - 1] в твоём коде - выход за границы массива.

Если у нас k одинаковых чисел, то кол-во пар этих чисел равно не k, как у тебя, а:
k * (k - 1) / 2.

Ещё одна ошибка твоего кода в том, что ты не учитываешь значение c после цикла.

Если делать как у тебя - с сортировкой и одним циклом, то:
 nums, count, start = sorted([int(n) for n in input().split()]), 0, 0 
nums += [nums[-1] + 1] # отсечка - чтобы учитывать все пары
for i in range(1, len(nums)):
if nums[i] != nums[start]:
count += (i - start) * (i - start - 1) // 2
start = i
print(count)
Но если подумать, то:
k * (k - 1) / 2 == 1 + 2 + ... + (k - 2) + (k - 1)
И код можно переписать в виде:
 nums, count, k = sorted([int(n) for n in input().split()]), 0, 0
for i in range(1, len(nums)):
k = (k + 1) * (nums[i] == nums[i - 1])
count += k
print(count)
Мадемит Тобагабилов
Мадемит Тобагабилов
81 941
Лучший ответ
Что за b? Если считаете количество пар в c, то и считайте в с, b не нужна. Вы c обнуляете в elif
Циклов должно быть 2, проходите ими по непересекающимся числам и сравниваете, сортировка не нужна и доп переменные кроме счетчика

 nums = [int(n) for n in input().split()]  
count = 0
for i in range(len(nums) - 1):
for j in range(i + 1, len(nums)):
if nums[i] == nums[j]:
count += 1
print(count)

1 2 3 2 3
сравниваются:
1 с 2
1 с 3
1 с 2
1 с 3
конец
2 с 3
2 с 2 (+1)
2 с 3
конец
3 с 2
3 с 3 (+1)
конец
2 с 3
конец
Борис Чечнев количество всех пар
Борис Чечнев "с" = количество пар одного числа(например, в списке "1 1 2 2 2 3 4" "с" должна считать сначала количество единиц, потом двоек, а "b", в свою очередь, считает количество всех пар)