#python
#python
Вопрос:
У меня есть строка типа "A:22.0 /4.03 B:15.05 /3.0 C:120.15 /12.4"
(с пробелами).
Я хочу извлечь числа и сохранить их в переменных ввода с определенными именами. Для примера, я хочу иметь переменную A1 = 22.0
, A2 = 4.03
, B1 = 15.05
, B2 = 3.0
, C1 = 120.15
, C2 = 12.4
Переменные в строке могут быть не в этом порядке, но всегда будут группы:
(variable name):(value1) /(value2)
в таком порядке.
Приветствуется любая помощь или идея. Спасибо!
Комментарии:
1. Определите грамматику, затем напишите синтаксический анализатор, затем используйте этот анализатор для анализа ваших строк — просто! (Шучу, это непростая задача: попробуйте создать регулярное выражение, чтобы получить каждую группу отдельно, а затем попытаться проанализировать каждую группу)
2. Ну, я просто дам вам подсказку, чтобы вы начали. Проанализируйте строку (либо разделенные, либо регулярные выражения) и сохраните пары значений ключа в словаре. Вы никогда не указывали о потенциальных крайних случаях. Что делать, если вы видите две буквы «А» в строке?
3. Как насчет сохранения их в словаре, например
nums = {'A':[22, 4.03], 'B':[15.05, 3], 'C':[120.15. 12.4]}
? Будет ли такой результат работать для вас? Тогда вы могли бы получить доступ к таким значениям, какnums['B'][1]
.
Ответ №1:
Есть миллион способов сделать это. Регулярные выражения великолепны и могут быть полезны для пропущенных значений и других крайних случаев. Предполагая, что ваши данные никогда не пропускают значение или в любом другом формате, простая замена строки и разделение могут выполнить эту работу.
Вам будет сложно называть переменные на основе значений из строки (A1, A2 и т. Д.). Для хранения данных такого типа лучше использовать словарь.
Сложной частью этого является построение словаря, который в данном случае отсчитывает от 0 до длины элементов в разделенном списке на 3 секунды и использует эти числа для создания пар ключ: значение словаря.
Исходная строка
x = "A:22.0 /4.03 B:15.05 /3.0, C:120.15 /12.4"
Замените специальные символы пробелом и разделите на пробелы (удалит лишние пробелы)
b = x.replace(':',' ').replace('/',' ').split()
Дает вам
['A', '22.0', '4.03', 'B', '15.05', '3.0,', 'C', '120.15', '12.4']
Создайте словарь из ваших данных
output = {b[x]:[b[x 1],b[x 2]] for x in range(0,len(b),3)}
Вывод:
{'A': ['22.0', '4.03'], 'B': ['15.05', '3.0,'], 'C': ['120.15', '12.4']}
Затем получить доступ к данным как таковым:
output['A'][0]
22.0
output['A'][1]
4.03
Ответ №2:
Чтобы извлечь их, вы должны использовать регулярное выражение: вот документация: RegEx (Python)
Но я рекомендую вам взглянуть на словари. Это обеспечит контроль ключей и значений, это выглядит так, как вам нужно. Вот пример:
variableName = {
"A1":22.0,
"A2":4.03
}
Вот ссылка на хороший учебник о том, как это использовать: https://www.pythonforbeginners.com/dictionary/how-to-use-dictionaries-in-python /
Комментарии:
1. Идея со словарями должна помочь мне с работой, спасибо!