2013-10-24 10 views
23

Как мне сделать что-то вродеИзменение строки целых чисел, разделенных пробелами в список Int

x = '1 2 3 45 87 65 6 8' 

>>> foo(x) 
[1,2,3,45,87,65,6,8] 

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

+1

К нисходящим объектам: Я думаю, что этот вопрос довольно хорош. Хотя он не показывал код, он показывает свои усилия: «Я полностью застрял, если я сделаю это по индексу, тогда цифры с более чем одной цифрой будут разбиты» – aIKid

+0

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

+0

Я только что посмотрел ваш профиль ха-ха. Если вы хотите снова задать вопрос, вы можете создать новый профиль или повысить свою репутацию. Я тоже был в этой ситуации. – aIKid

ответ

26

Вы можете использовать список понимание в сочетании с методом .split():

x = [int(i) for i in x.split()] 

В качестве альтернативы вы можете использовать map Aswell:

x = map(int, x.split()) 

Это создаст list из int «S, если вы хотите целые числа.

или просто использовать .split() для списка строк:

x = x.split() 

Если вы хотите создать список str

+0

+1 для преобразования в int –

+0

для строк вам просто нужно 'x = x.split()' –

0

Просто, чтобы сделать ясное объяснение.

Вы можете использовать метод string str.split(), который разбивает строку на список. Вы можете узнать больше об этом методе here.

Пример:

def foo(x): 
    x = x.split() #x is now ['1','2','3','45', ..] the spaces are removed. 
    for i, v in enumerate(x): #Loop through the list 
     x[i] = int(v) #convert each element of v to an integer 

Это должно сделать это!

>>> x 
[1, 2, 3, 45, 87, 65, 6, 8] 
+0

Это не так, как работает 'enumerate' ... он возвращает индекс и значение в данном индексе как кортеж. Этот код будет сбой * * * int (i) 'и' x.index (i) '. – SethMMorton

+0

@SethMMorton Ужасно об этом. Обновлен мой ответ. – aIKid

+0

Мой код был неполным, я забыл и отправил его. Сожалею. – aIKid

1

Простая линия может быть ...

print (map(int, x.split())) 

Как-то один благоразумно поправил меня, в питона> = 3, то он становится,

print(list(map(int,x.split()))) 

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

+5

Обратите внимание, что в python3 'map' возвращает объект * map *, поэтому вам нужно будет вызвать' list', чтобы превратить его в список. – SethMMorton

+0

Спасибо SethMMorton, я не знал об этом :) –

2

Не нужно беспокоиться, потому что python предоставляет функцию split() для изменения строки в списке.

x='1 2 3 4 67 8 9' 
x.split() 

[ '1', '2', '3', '4', '67', '8']

или если вы хотите выход в целочисленном виде, то вам можно использовать функциональна карта

map(int ,x.split(' ')) 

[1, 2, 3, 4, 67, 8]

2

s=' 1 2 3 4 67 8 9 '
если есть пробел в начале или в конце строки или множественным пространства между элементами, как описано выше, функция:
out = [item for item in s.split(' ')]
будет возвращать пустые элементы:
['', '1', '2', '', '3', '4', '67', '8', '9', '']
Вы можете отфильтровать его:
out = [item for item in filter(None, s.split(' '))]
Выход становится:
['1', '2', '3', '4', '67', '8', '9']
фильтр с None в качестве первого арг удаляет пустые элементы.

+0

Да, но .. Какова карта, если вы уже итерации? То же самое без 'map':' [int (i) для i в фильтре (None, s.split (''))] 'или без понимания списка:' map (int, filter (None, s.split (''))) ' – Mikaelblomkvistsson

0

Если у вас есть только цифры в вашем входе, вы можете иметь что-то вроде следующего:

>>> x = '1 2 3 45 87 65 6 8' 
>>> num_x = map(int, filter(None, x.split(' '))) 
>>> num_x 
[1 2 3 45 87 65 6 8] 

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

>>> x = ' 1 2 3 4 ' 
>>> num_x = map(int, filter(None, x.split(' '))) 
>>> num_x 
[1, 2, 3, 4] 

Вы можете заменить ввод в x.split(' '), чтобы соответствовать другие типы разделителей, а также, например, , или ; и т. Д.

Смежные вопросы