Вы можете сделать это очень легко, используя разделение и преобразование.Необходимым условием для использования этого подхода является то, что строка должна содержать только цифры и пробелы и никакие другие символы не должны присутствовать.
>>> li = "8 1 2 9 12"
>>> result = [int(i) for i in li.split(' ')]
>>> print(result)
[8, 1, 2, 9, 12]
Теперь перейдем к вашей реализации, внутри первого цикла for, for s in x:
, он перебирает строку.Следовательно, s принимает следующие значения:
>>> for s in x:
... print(s)
...
8
1
2
9
1
2
Это приводит к созданию 6 целочисленных значений, которые фактически равны 5, когда строка проверяется вручную.Это основная причина, по которой вы не получаете ожидаемый результат.
Если бы строка была чем-то вроде x = "12345", она бы возвратилась, [1,2,3,4,5], чтонеправильно.