Форум сайта python.su
Уважаемые коллеги!
Столкнулся с одной проблемой при решении задачи.
Условие:
“Дан список чисел. Посчитайте, сколько в нём пар элементов, равных друг другу. Считается, что любые два элемента, равные друг другу, образуют одну пару, которую необходимо посчитать”.
Нужно решить используя знания о списках.
Для входных данных 1 1 1 1 1 ответ 10
Для входных данных 3 2 1 2 2 4 3 2 5 3 2 ответ 13.
Вот моё решение:
a =
x = 0
for i in a:
if a.count(i) > 1:
x += a.count(i) - 1
a.remove(i)
print(x)
Но почему, то для первого варианта программа выдает ответ 9. Почему так?
Ведь для 1 1 1 1 1 выражение a.count(i) будет равно 5, и, соответственно, ввиду того что в цикле for мы постепенно удаляем 1 элемент из списке (a.remove) получается должен быть равен x = 4+3+2+1 = 10. А программа выдаёт 9.
Помогите, пожалуйста.
Отредактировано zantal (Май 30, 2019 13:44:48)
Офлайн
первая строка - это “Список”. Просто почему-то не отобразился
Отредактировано zantal (Май 30, 2019 13:44:22)
Офлайн
код на форумах, в чатах и тп надо оборачивать в теги code. Поправьте ваше сообщение.
Офлайн
zantalЯ так понимаю, что дело в удалении элементов итерируемой коллекции в процессе итерации, для наглядности переделал код:
Ведь для 1 1 1 1 1 выражение a.count(i) будет равно 5, и, соответственно, ввиду того что в цикле for мы постепенно удаляем 1 элемент из списке (a.remove) получается должен быть равен x = 4+3+2+1 = 10. А программа выдаёт 9.
a = list(map(int, "1 2 3 4 5".split(" "))) for i in a: print(a, ", deleting:", i) a.remove(i)
Офлайн
Ок, спасибо.
Вот код:
a = [int(s) for s in input().split()]
x = 0
for i in a:
if a.count(i) > 1:
x += a.count(i) - 1
a.remove(i)
print(x)
Офлайн
zantalИспользуй
Вот код:
>>> def count_pairs(lst): ... out = 0 ... tmp = lst[:] ... while tmp: ... out += tmp.count(tmp.pop()) ... return out ... >>> count_pairs([1, 1, 1, 1, 1]) == 10 True >>> count_pairs([3, 2, 1, 2, 2, 4, 3, 2, 5, 3, 2]) == 13 True >>>
Офлайн