Помогите понять в чём ошибка в коде (Python)

Прохожу курс на Stepik, там такая задача

Напишите программу, которая принимает на вход список чисел в одной строке и выводит на экран в одну строку значения, которые встречаются в нём более одного раза.

Для решения задачи может пригодиться метод sort списка.

Выводимые числа не должны повторяться, порядок их вывода может быть произвольным.

Мой код:

a = [int(i) for i in input()]
q = len(a)-1
c = []

a.sort()


for di in a:
    b = a.count(di)
    if b >= 2 and di not in c:
        c.append(di)
    continue

print(" ".join(map(str,  c)))

В IDE всё работает нормально, но на степик мне выдаёт ошибку:

Error:
Traceback (most recent call last):
  File "jailed_code", line 1, in <module>
    a = [int(i) for i in input()]
  File "jailed_code", line 1, in <listcomp>
    a = [int(i) for i in input()]
ValueError: invalid literal for int() with base 10: ' '

Объясните, что у меня не так, пожалуйста


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

Автор решения: MarianD

Первая команда

a = [int(i) for i in input()]

должна быть

a = [int(i) for i in input().split()]

Объяснение:

Когда например у вас на вводе появится такой список чисел:

13 2 7 2

то функция input() возвращает не список, а просто строку

"13 2 7 2"

которая в генераторе списка

[int(i) for i in input()]

итерируется по отдельным символам — т.е. переменная i принимает постепенно значения "1", "3", " " - и вот ошибка

ValueError: invalid literal for int() with base 10: ' '

Пробель невозможно функцией int() перевести в число!

С другой стороны, из вводимой строки возможно получить желательный список ["13", "2", "7", "2"] методом split().

→ Ссылка