Помогите понять в чём ошибка в коде (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 шт):
Первая команда
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().