Динамически создавать переменные из разделенной строки - PullRequest
0 голосов
/ 15 мая 2018

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

String = 'Jurassic Park 3'
Variable1= 'jurassic'
Variable2= 'park'
Variable3= '3'

Дело в том, что строка может быть очень длинной. Поэтому он должен уметь обрабатывать предложение, содержащее много слов.

У меня уже есть начало кода:

import re
input = str(d["input_text"])

l = []
regex = re.compile(r'(\d+|\s+)')

s = regex.split(input)
l = []
for elem in s: 
    if elem =='':
        continue
    else:
        l.append(elem)

ret_dict = {}
ret_dict["text_list"] = l
ret_dict["returncode"] = 0 # set to 1 to output on the FAILURE output
return ret_dict

с этим кодом, на данный момент у меня есть

input variable = input_text
output variable = text_list

Я бы хотел

input variable = input_text
output variable1 = variable1
output variable2 = variable2
output variable3 = variable3
output variable4 = variable4

и т.д.

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Когда приходится определять неизвестное количество переменных, мне нравится использовать словари.Это можно сделать так:

string = 'Jurassic Park 3'            # Original string
string_list = string.split()          # Returns: ['Jurassic', 'Park', '3']

dic = {}                              
for i in range(len(string_list)):
   var_name = 'Variable{}'.format(i+1)   # Define name of variable, start with 'Variable1'
   dic[var_name] = string_list[i]     # Insert variable name as key and list entry as value

Печать словаря вернет:

{'Variable1': 'Jurassic', 'Variable2': 'Park', 'Variable3': '3'}

Для доступа, например, Variable2, вы можете сделать:

dic['Variable2']

который возвращает

'Park'

Если число переменных станет большим, я думаю, что собрать их в Словаре было бы легче, чем иметь индивидуально определенные переменные, как предлагает ваш вопрос.

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

0 голосов
/ 16 мая 2018

Я нашел что-то еще, и это работает.Мне просто нужно сделать еще одну вещь на этом.если элемент списка 'пробел', добавьте его в начало следующего элемента.

import re
input = str(d["Jurassic Park 3"])

l = []
regex = re.compile(r'(\d+|\s+)')

s = regex.split(input)
l = []
for elem in s: 
    if elem =='':
        continue
    else:
        l.append(elem)

ret_dict = {}
ret_dict["text_list"] = l
ret_dict["returncode"] = 0 # set to 1 to output on the FAILURE output
return ret_dict

Это возвращает мне:

["Jurassic"," ","Park"," ","3"]

, и я хотел бы иметь:

["Jurassic"," Park"," 3"]
0 голосов
/ 15 мая 2018

Сначала вы можете разбить вашу строку в списке, подобном этому

string = "Jurassic Park 3"
string_list = string.split()

, распечатав это, вы получите:

['Jurassic', 'Park', '3']

Затем мы проведем список по списку вот так

for i in range(0, len(string_list)):
    exec("word%d = %s" % (i + 1, repr(string_list[i])));

Что он делает, просматривает список слов и помещает все в переменную word1 word2 word3, и сколько бы ваша строка ни шла.

Надеюсь, это поможет

...