Я хочу извлечь числа из списка со строками - PullRequest
2 голосов
/ 26 сентября 2019

У меня есть список, содержащий строки: list = ['string', 'string', 'string', ...]
Эти строки похожи на: 'NumberDescription 33.3'
Я хочу извлечь только числа без 'NumberDescription' part.

Я пробовалэто с регулярным выражением и функцией фильтра с re.match.Но в результате получается пустой список.

dat_re = re.compile(r'\d+.\d')  
dat_list = list(filter(dat_re.match, list))

Как я уже сказал, мне нужны только цифры из списка, и на последнем шаге я хочу преобразовать элементы списка в плавающие числа.

Ответы [ 3 ]

1 голос
/ 26 сентября 2019
list_strings=['1','2','3']
for i in list_strings:
    num_list.append(int(i))
or

list_num = [int(x) for x in list_strings]

Проверьте этот пример кода один раз.

1 голос
/ 26 сентября 2019

Чтобы извлечь значение с плавающей точкой непосредственно из списка:

import re
l = ['string 23.3', 'string 33.35', 'string 44.55']
dat_list = list(float(match.group(1)) for match in map(re.compile('(\d+\.\d+)').search, l))
print(dat_list)

OUPUT:

 [23.3, 33.35, 44.55]
1 голос
/ 26 сентября 2019

Здесь есть несколько точек:

  1. Использовать re.search, поскольку re.match ищет только совпадение в начале строки ,
  2. Escape theточка, как это специальный метасимвол регулярного выражения
  3. Вы фильтруете список только с filter(...), вы не извлекаете значения.
  4. Если вы планируете найти первое появление digit+.digit+, вы можете использовать регулярное выражение, например \d+\.\d+
  5. Если все ваши элементы в формате string number, используйте s.split()[-1], чтобы получитьчисло, нет необходимости в регулярном выражении

Используйте

dat_list = [float(dat_re.search(x).group()) for x in l if dat_re.search(x)]

Или, если формат является фиксированным

dat_list = [float(x.split()[-1]) for x in l]

См. демонстрационную версию Python :

import re
l = ['string 23.3', 'NumberDescription 33.35']
dat_re = re.compile(r'\d+\.\d+')
dat_list = [float(dat_re.search(x).group()) for x in l if dat_re.search(x)]
print(dat_list)
# => [23.3, 33.35]
print([float(x.split()[-1]) for x in l])
# => [23.3, 33.35]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...