missing_range

本文介绍了一个算法,用于找出数组中指定范围内缺失的数值区间。通过遍历数组并使用辅助函数来确定缺失范围,最终返回所有缺失的数值区间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#coding:utf-8
'''
Created on 2017-9-21

@author: 刘帅
'''
## find missing ranges between low and high in the given array.
# ex) [3, 5] lo=1 hi=10 => answer: [1->2, 4, 6->10]
def missing_ranges(nums,lo,hi):
    res = []
    start = lo
    for num in nums:
        if num < start:
            continue
        if num == start:
            start += 1
            continue
        res.append(get_range(start,num - 1))
        start = num + 1
    if start <= hi:
        res.append(get_range(start,hi))
    return res

def get_range(n1,n2):
    if n1 == n2:
        return str(n1)
    else:
        return str(n1) + "->" + str(n2)

nums = [3, 5, 10, 11, 12, 15, 19]
print("original:", nums)
print("missing range: ", missing_ranges(nums,0,30))
import pandas as pd import numpy as np from scipy.interpolate import lagrange # 读取数据 def read_data(file_path): data = pd.read_csv(file_path, header=None) return data # 查询缺失值位置 def find_missing_values(data): missing_positions = data.isnull() return missing_positions # 拉格朗日插值 def lagrange_interpolation(data): # 对每一列进行插值 for col in range(data.shape[1]): # 获取非缺失值的位置和值 x = data.index[data[col].notnull()].values y = data[col][data[col].notnull()].values # 创建插值函数 f = lagrange(x, y) # 获取缺失值的位置 missing_indices = data.index[data[col].isnull()].values # 对缺失值进行插补 for idx in missing_indices: data.at[idx, col] = f(idx) return data # 主函数 if __name__ == "__main__": # 文件路径 file_path = 'E:/missing_data.csv' # 读取数据 data = read_data(file_path) # 查询缺失值位置 missing_positions = find_missing_values(data) print("缺失值位置:") print(missing_positions) # 计算每列缺失值的数量 missing_counts = missing_positions.sum(axis=0) print("\n每列缺失值的数量:") print(missing_counts) # 拉格朗日插值 data_interpolated = lagrange_interpolation(data) # 验证插补结果 missing_positions_after = find_missing_values(data_interpolated) print("\n插补后的缺失值位置:") print(missing_positions_after) # 保存插补后的数据 data_interpolated.to_csv('interpolated_data.csv', index=False, header=False) print("\n插补后的数据已保存到 'interpolated_data.csv'") 修改代码,不用def
06-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值