2016-01-03 2 views
1

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

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

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

n - длина строки чисел num - пустая строка. Я добавляю числа. Первоначально Num = «»

while i<n: 

    if temps[i]!=' ': 
     num=num+temps[i] 


    elif temps[i]==' ': 
     print type(num) 

     x=int(num) 

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

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

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

Благодаря

ответ

6

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

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

Да, именно то, что я писал :) – Caridorc

1

Если ваша строка выглядит следующим образом:

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

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

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

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

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 добавляется на карту, потому что я использую питона 3.x. Если вы используете python 2.x, вам это не нужно.

0

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

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

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

1

Встроенный метод будет делать работу, а также:

>>> 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] 
Смежные вопросы