Как сделать что-то вроде
x = '1 2 3 45 87 65 6 8'
>>> foo(x)
[1,2,3,45,87,65,6,8]
Я полностью застреваю, если я делаю это по индексу, то цифры с более чем 1 разрядом будут разбиты. Помогите пожалуйста.
Как сделать что-то вроде
x = '1 2 3 45 87 65 6 8'
>>> foo(x)
[1,2,3,45,87,65,6,8]
Я полностью застреваю, если я делаю это по индексу, то цифры с более чем 1 разрядом будут разбиты. Помогите пожалуйста.
Вы можете использовать понимание списка в сочетании с методом .split():
x = [int(i) for i in x.split()]
В качестве альтернативы вы можете использовать map
, а также:
x = map(int, x.split())
Это создаст list
of int
, если вам нужны целые числа.
или просто используйте .split()
для списка строк:
x = x.split()
Если вы хотите создать список str
Не нужно беспокоиться, потому что 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]
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 как первый arg удаляет пустые элементы.
Простая строка может быть...
print (map(int, x.split()))
Как кто-то разумно исправил меня, в python >= 3, он должен стать
print(list(map(int,x.split())))
Он также может быть пользователем в более ранних версиях.
Просто для пояснения.
Вы можете использовать метод string str.split()
, который разбивает строку на список. Вы можете узнать больше об этом методе здесь.
Пример:
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]
Предполагая, что у вас есть только цифры на вашем входе, вы можете иметь что-то вроде следующего:
>>> 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(' ')
, чтобы соответствовать другим типам разделителей, например, например. ,
или ;
и т.д.