Найти - Пользователи
Полная версия: Прошу помочь с маленькой задачкой
Начало » Центр помощи » Прошу помочь с маленькой задачкой
1
zantal
Уважаемые коллеги!
Столкнулся с одной проблемой при решении задачи.
Условие:
“Дан список чисел. Посчитайте, сколько в нём пар элементов, равных друг другу. Считается, что любые два элемента, равные друг другу, образуют одну пару, которую необходимо посчитать”.
Нужно решить используя знания о списках.

Для входных данных 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
первая строка - это “Список”. Просто почему-то не отобразился
JOHN_16
код на форумах, в чатах и тп надо оборачивать в теги code. Поправьте ваше сообщение.
Egorro13
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 у итератора все равно возвращает второй элемент, а не тот, который был вторым до удаления, и т.д. до конца
zantal
Ок, спасибо.
Вот код:
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)
py.user.next
zantal
Вот код:
Используй
while lst
и
lst.pop()

  
>>> 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
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB