2014-02-01 3 views
2

Как извлечь целые числа из строки (целые числа, разделенные пробелом) и присвоить их различным переменным.
например.
Учитывая строка: "2 3 4 5"
правопреемник: n=2, m=3, x=4, y=5Преобразование строки в целое число, разделенное пробелом

+0

Знаете ли вы, сколько ints в строке? –

+0

Если строка имеет нечисловые символы, такие как 's =" 2, 3, 45, a, b, 5, "", вы можете использовать 're.findall (r '\ d +', s)' для преобразования в список строк чисел. –

ответ

3

Нечто подобное (читать комментарии):

>>> s = "2 3 4 5" 
>>> s.split() # split string using spaces 
['2', '3', '4', '5'] # it gives you list of number strings 
>>> n, m, x, y = [int(i) for i in s.split()] # used `int()` for str --> int 
>>> n   # iterate over list and convert each number into int 
2    # and use unpack to assign to variables  
+0

Что делать, если вы не знаете, сколько элементов в строке? – wolfrevo

+0

@wolfrevo Тогда я буду использовать переменную списка 'L = [int (i) для i в s.split()]' теперь я могу использовать любые элементы как 'L [j]' для 'j

+0

, пожалуйста, см. Мой ответ – wolfrevo

2

число значений в строке может быть переменным. В этом случае вы можете назначить переменные в dictionnary следующим образом:

>>> s = "2 3 4 5" 
>>> temp = [(count, int(value)) for count, value in enumerate(s.split(' '), 1)] 
>>> vars = {} 
>>> for count, value in temp: 
... vars['var' + str(count)] = value 
>>> vars 
{'var4': 5, 'var1': 2, 'var3': 4, 'var2': 3} 
>>> vars['var2'] 
3 

Если вы действительно не хотите dictionnary, вы могли бы рассмотреть следующие вопросы:

>>> temp = [(count, int(value)) for count, value in enumerate(s.split(' '), 1)] 
>>> for count, value in temp: 
...  locals()['var{}'.format(count)] = value 
>>> var2 
3 

locals()['var{}'.format(count)] = value добавит локальную переменную с именем «var {count}» и присвоить ему значение. locals() показывает локальные переменные и их значения.

Помните: сделайте это, только если вы действительно знаете, что делаете. Прочтите также примечание к locals в «Python documentation»: «Содержание этого словаря не должно изменяться, изменения могут не влиять на значения локальных и свободных переменных, используемых интерпретатором».

+0

, вы можете написать как «var = dict ((« var »+ str (count), int (value)) для count, значение в enumerate (s.split())' в одной строке. .. если кто-то использует Python3, то он может писать выражение в '{}' dict compression ... .. но ваша идея в виде слова хорошая. –

+0

Я собирался добавить то же самое в свой ответ в области 'vars()', но я где-то читал поведение не определено (я думаю, в Apress) .Я не уверен в том, но если это определенное поведение, то это очень хороший ответ. Я очень люблю учиться на Python. –

+0

Я просто [читаю здесь] (http: // stackoverflow.com/questions/8028708/dynamically-set-local-variable-in-python) «Модификация locals() не определена». О, это неизвестно. –

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