【问题标题】:How can I only find negative and positive numbers using re.findall?如何使用 re.findall 只找到负数和正数?
【发布时间】:2020-10-07 01:21:58
【问题描述】:

我正在创建一个程序,它读取 2 个不同的文件,每个文件都包含 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))

【问题讨论】:

    标签: python python-3.x regex list


    【解决方案1】:

    您应该可以使用以下模式 + 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]
    

    【讨论】:

    • 这很好用,非常感谢。你知道我的代码出了什么问题吗?
    猜你喜欢
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 2014-06-27
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    相关资源
    最近更新 更多