Проблемы с преобразованием строки из строки в int python

Я работаю над этой загадкой для кодирования и должен скрывать некоторые числа в цепочке целыми числами для работы с ними. примером может служить

('2 -5 7 8 10 -205') 

То, что я пытался сделать, это добавить числа в пустую строку и преобразовать их в int, когда было место. Вот код.

n – длина строки чисел num – это пустая строка, в которую я добавляю числа. Первоначально num = ""

  while i<n: if temps[i]!=' ': num=num+temps[i] elif temps[i]==' ': print type(num) x=int(num) 

Проблема в том, что когда он запускается, я получаю ошибку для строки с x = int (num), говорящей

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

когда я печатаю num, я просто получаю числа в строковом формате, поэтому я не понимаю, что случилось. Помощь была бы действительно оценена, и если у вас возникнут какие-либо вопросы или вам потребуется разъяснение, спросите пожалуйста.

благодаря

5 Solutions collect form web for “Проблемы с преобразованием строки из строки в int python”

Используйте str.split() для разделения строки в str.split() , затем примените int к каждому элементу:

 s = '2 -5 7 8 10 -205' nums = [int(num) for num in s.split()] 

Если ваша строка выглядит так:

 s = '2 -5 7 8 10 -205' 

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

 >>> [int(x) for x in s.split(' ')] [2, -5, 7, 8, 10, -205] ## list of ints 

Вы можете сделать это со списком:

 data = ('2 -5 7 8 10 -205') l = [int(i) for i in data.split()] print(l) [2, -5, 7, 8, 10, -205] 

Или, альтернативно, вы можете использовать функцию map :

 list(map(int, data.split())) [2, -5, 7, 8, 10, -205] 

Бенчмаркинг :

 In [725]: %timeit list(map(int, data.split())) 100000 loops, best of 3: 2.1 µs per loop In [726]: %timeit [int(i) for i in data.split()] 100000 loops, best of 3: 2.54 µs per loop 

Так что с картой она работает быстрее

Примечание : list добавляется к карте, потому что я использую python 3.x. Если вы используете python 2.x, вам это не нужно.

Встроенный метод также выполнил бы эту работу:

 >>> s = '2 -5 7 8 10 -205' >>> map(int, s.split()) [2, -5, 7, 8, 10, -205] 

Если Python 3+:

 >>> s = '2 -5 7 8 10 -205' >>> list(map(int, s.split())) [2, -5, 7, 8, 10, -205] 

Вы должны попытаться разбить задачу на две подзадачи:

  1. Разделите числа в строке на список чисел, используя split
  2. Преобразуйте каждую строку из списка в обычное целое с помощью карты

Как общий совет – вы также должны прочитать документацию, чтобы вы могли выяснить, сколько тяжелой работы можно было бы сохранить, просто связав вывод одной функции в качестве входа следующей функции.

Python - лучший язык программирования в мире.