zantal
Май 30, 2019 13:38:55
Уважаемые коллеги!
Столкнулся с одной проблемой при решении задачи.
Условие:
“Дан список чисел. Посчитайте, сколько в нём пар элементов, равных друг другу. Считается, что любые два элемента, равные друг другу, образуют одну пару, которую необходимо посчитать”.
Нужно решить используя знания о списках.
Для входных данных 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:40:02
первая строка - это “Список”. Просто почему-то не отобразился
JOHN_16
Май 30, 2019 14:36:45
код на форумах, в чатах и тп надо оборачивать в теги code. Поправьте ваше сообщение.
Egorro13
Май 30, 2019 14:47:15
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)
Т.е. после удаления первого элемента метод next у итератора все равно возвращает второй элемент, а не тот, который был вторым до удаления, и т.д. до конца