Какое лучшее, что нужно для анализа списков плавающих чисел, разделенных пробелом в python?
У меня есть строки такого рода, которые выйдут из источника:
string = " 4 1.6 8.29 0 0 3.55e-15 -1.28e-13 "
с неизвестным количеством пробелов, разделяющих числа и начало или конец строки.
Обычно я просто использовал numbers = map(float, string.split(" "))
когда я мог гарантировать, что между числами будет только одно пространство, и что в начале или конце строки не будет пробелов. Я не re.split("\s+", string)
, но кто-то предложил мне использовать re.split("\s+", string)
но это не работает, потому что иногда я получаю пустые строки в начале списка.
Я использую сейчас: re.split("\s+")
но это не работает, потому что иногда я получаю пустые строки в начале списка.
Я использую сейчас:
res = map(float, re.findall("\d+\S*\d*", string)
которая работает как-то, но выглядит хрупкой и уродливой для меня. Он может соответствовать многим строкам, которые не будут выдавать числа.
Какой лучший шаблон регулярного выражения, который всегда будет соответствовать целым числам и числам с плавающей запятой с или без экспоненциальной нотации, чтобы я мог использовать re.findall(patt, string)
и безопасно восстановить список чисел?
Нет регулярного выражения. Просто используйте string.split()
без каких-либо аргументов; он будет разделен на любое количество пробелов.
Пример использования str.split()
с пониманием списка - немного больше Pythonic и IMHO clearer, чем map
:
>>> string = " 4 1.6 8.29 0 0 3.55e-15 -1.28e-13 "
>>> floats = [float(x) for x in string.split()]
>>> floats
[4.0, 1.6000000000000001, 8.2899999999999991, 0.0, 0.0, 3.5500000000000001e-15,
-1.2800000000000001e-13]