2016-04-22 4 views
-2

любые идеи о том, как я мог бы разделить это (пытается получить в среднем что-то)python Как бы я разделил это?

import re 
print(sum(float(re.sub(r"[^\d.]", "", post.text)) for post in posts)) 
+0

'сумма (*)/LEN (сообщений)' – Pythonista

+0

@ Nevermind123 - что логика в ответ вы выбрали? Он был опубликован позже, чем мой, и является менее правильным, поскольку он не затрагивает структуру данных 'posts' в OP, а создает собственную структуру данных. Мой ответ за 17 минут будет работать, не требуя от вас изменения кода. –

ответ

0

Это работает для меня.

import re 

posts = ['1test', '23test', '15test'] 

r = re.compile('(^\d)') 
print sum([float(r.match(post).group(1)) for post in posts])/len(posts) 
+0

Если числа в ваших строках все будут положительными целыми числами, тогда мой ответ будет работать нормально, но в противном случае вы должны использовать более общее регулярное выражение, такое как JRazor. Было бы немного более подробно о формате чисел в вашей текстовой строке. – kaisquared

0

Как это:

import re 
print(sum(float(re.sub(r"[^\d.]", "", post.text)) for post in posts)/len(posts)) 
0

Используйте поиск, а не замены. Вы можете найти float как r"\b\d+\.\d+\b". Если вы хотите, чтобы найти все номера (не только плавать), использовать r"\b\d+\.*\d*\b":

import re 

values = map(float, re.findall(r"\b\d+\.\d+\b", your_string)) 
average = sum(values)/len(values) 

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