如何使用re.findall只查找负数和正数



我正在创建一个程序,该程序读取两个不同的文件,每个文件都填充了10000个数字,并计算它们的平均值和标准差。我在尝试创建所有数字的列表时遇到问题。我想使用re.findall只查找负数和正数,并将其添加到列表中。但我似乎无法让它发挥作用,无论我尝试什么,它都会返回一个空列表。到目前为止,这是我的代码:

import os
import math
import re
def mean(lst):
total = 0
nums = 0
for i in lst:
nums += 1
total += i
mean_num = total / nums
mean_num = round(mean_num, 1)
return mean_num
def std(lst):
mean_num = mean(lst)
total = 0
nums = 0
for i in lst:
i -= mean_num
i **= 2
total += i
nums += 1
std_num = total / nums
std_num = math.sqrt(std_num)
return std_num
path1 = os.getcwd()
path1 += "/data/file_10000integers_A.txt"
path2 = os.getcwd()
path2 += "/data/file_10000integers_B.txt"
with open(path1, "r") as f:
string1 = f.read()
list1 = re.findall("^[-+]?d*$", string1)

with open(path2, "r") as f:
string2 = f.read()
list2 = re.findall("^[-+]?d*$", string2)
print(list1)
print(mean(list1), std(list1))
print(mean(list2), std(list2))

您应该能够使用以下模式+findall

import re
content = 'this is a string with -123 numbers 456 789 - 1 some floats 1.23 -5.21 1.'
pattern = re.compile(r'(-?d+.?d*)')
numbers = [float(match) for match in pattern.findall(content)]
print(numbers)

输出:

[-123.0, 456.0, 789.0, 1.0, 1.23, -5.21, 1.0]

最新更新