You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3实现双数值列表校验及皮尔逊相关系数计算

问题需求
  • 实现Python 3程序,完成以下功能:
    1. 校验用户输入的两个数值列表,确保仅包含数值(支持整数、小数、负数)
    2. 输入允许元素前后有额外空格,数值间必须用逗号分隔
    3. 若列表包含非数值元素,输出提示was not able to calculate the correlation并终止程序
    4. 不使用第三方库或高级函数,代码简洁
    5. 若校验通过,计算并输出皮尔逊相关系数(保留两位小数,如示例输出的0.83)
现有代码的问题

用户尝试的代码中,使用ele.isdigit()判断元素是否为数值,该方法仅能识别正整数,无法处理负数(带负号)、小数(带小数点),导致合法的数值会被误判为非数值,同时真正的非数值元素在后续转float时直接报错,无法按要求输出提示并终止。

解决方案代码
def is_valid_number(s):
    s = s.strip()
    # 处理空字符串情况
    if not s:
        return False
    # 允许开头有一个负号
    start = 0
    if s[0] == '-':
        start = 1
        # 只有负号的无效情况
        if len(s) == 1:
            return False
    # 统计小数点数量,最多一个
    dot_count = 0
    for c in s[start:]:
        if c == '.':
            dot_count += 1
            if dot_count > 1:
                return False
        elif not c.isdigit():
            return False
    return True

def parse_input_list(input_str):
    # 按逗号分割,处理每个元素的空格
    elements = [ele.strip() for ele in input_str.split(',')]
    # 校验所有元素是否为合法数值
    if not all(is_valid_number(ele) for ele in elements):
        print("was not able to calculate the correlation")
        exit()
    # 转换为float列表
    return [float(ele) for ele in elements]

def pearson_correlation(x, y):
    if len(x) != len(y):
        print("was not able to calculate the correlation")
        exit()
    n = len(x)
    # 计算各项求和值
    sum_x = sum(x)
    sum_y = sum(y)
    sum_xy = sum([a*b for a,b in zip(x,y)])
    sum_x_sq = sum([a**2 for a in x])
    sum_y_sq = sum([b**2 for b in y])
    # 计算分子分母
    numerator = n * sum_xy - sum_x * sum_y
    denominator = ((n * sum_x_sq - sum_x**2) * (n * sum_y_sq - sum_y**2)) ** 0.5
    # 处理分母为0的情况
    if denominator == 0:
        print("was not able to calculate the correlation")
        exit()
    return numerator / denominator

# 主程序
list1 = parse_input_list(input("Enter list1:"))
list2 = parse_input_list(input("Enter list2:"))

corr = pearson_correlation(list1, list2)
print(f"{corr:.2f}")
代码说明
  1. 输入校验函数is_valid_number:
    • 先去除元素前后空格,处理空元素
    • 支持负号开头,且确保负号后有有效数字
    • 限制小数点最多一个,其余字符必须是数字
  2. 输入解析函数parse_input_list:
    • 分割输入字符串,处理每个元素的空格
    • 用all()结合校验函数判断所有元素合法性,不合法则输出提示并退出
    • 合法则转换为float列表返回
  3. 皮尔逊相关系数计算pearson_correlation:
    • 先判断两个列表长度是否一致,不一致则输出提示退出
    • 手动计算求和项,按公式计算相关系数
    • 处理分母为0的情况(避免除零错误)
  4. 主程序:
    • 解析两个输入列表,计算并输出保留两位小数的相关系数

内容的提问来源于stack exchange,提问作者av i

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:35:54