【hot100篇-python刷题记录】【移动零】

R5-双指针

要用双指针来实现,想到一个办法,左右两边双指针,当左边指针找到0就和右指针交换值,要减少操作次数的话,就顺便判断一下右指针是否为0即可,最后肯定是双指针碰撞的。

不对,不能交换值,因为不能移动非零元素的相对位置

那就让两个指针相邻从数组头出发,遇到0就交换值,right的值应该不为0才对

分个类就ok了

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        n=len(nums)
        if n<2:
            return nums
        left,right=0,1
        while right<n:
            if nums[left]==0 and nums[right]!=0:
                 nums[left],nums[right]=nums[right],nums[left]
                 left+=1
                 right+=1
            elif nums[left]==0 and nums[right]==0:
                right+=1
            elif nums[left]!=0:
                left+=1
                right+=1
                

 

简单简化代码:

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        n=len(nums)
        if n<2:
            return nums
        left,right=0,1
        while right<n:
            if nums[left]==0 and nums[right]!=0:
                 nums[left],nums[right]=nums[right],nums[left]
                 left+=1
            elif nums[left]!=0:
                left+=1
            right+=1
                

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在进行数据分析和建模之前,数据预处理是必不可少的步骤。本文将介绍常见的数据预处理方法,以及如何用Python实现它们。 ## 缺失值处理 在实际数据中,经常会出现缺失值。这些缺失值可能是由于数据采集过程中的问题,或者是由于某些数据不可用或丢失。在分析过程中,缺失值会影响模型的准确性,因此需要进行处理。 ### 1. 删除缺失值 一种简单的方法是删除包含缺失值的行或列。这种方法简单、直接,但也可能会导致数据丢失过多。 ```python # 删除包含缺失值的行 df.dropna(inplace=True) # 删除包含缺失值的列 df.dropna(axis=1, inplace=True) ``` ### 2. 填充缺失值 另一种方法是用其他值填充缺失值。常见的填充方法包括: - 用平均值、中位数或众数填充 - 用前一个或后一个非缺失值填充 - 用插值法填充(比如线性插值、多项式插值等) ```python # 用平均值填充缺失值 df.fillna(df.mean(), inplace=True) # 用前一个非缺失值填充缺失值 df.fillna(method='ffill', inplace=True) # 用插值法填充缺失值 df.interpolate(inplace=True) ``` ## 异常值处理 异常值是指与其它数据极为不同的数据点。异常值可能是由于数据采集过程中的错误或异常,或者是由于真实的异常情况。在分析过程中,异常值会影响模型的准确性,因此需要进行处理。 ### 1. 删除异常值 一种简单的方法是删除包含异常值的行或列。这种方法可能会导致数据丢失过多。 ```python # 删除包含异常值的行 df = df[df['column'] < threshold] # 删除包含异常值的列 df.drop('column', axis=1, inplace=True) ``` ### 2. 替换异常值 另一种方法是用其他值替换异常值。常见的替换方法包括: - 用平均值、中位数或众数替换 - 用前一个或后一个非异常值替换 - 用插值法替换(比如线性插值、多项式插值等) ```python # 用中位数替换异常值 median = df['column'].median() df.loc[df['column'] > threshold, 'column'] = median # 用前一个非异常值替换异常值 df.loc[df['column'] > threshold, 'column'] = df.loc[df['column'] < threshold, 'column'].iloc[-1] # 用插值法替换异常值 df['column'] = df['column'].interpolate() ``` ## 数据标准化 在进行数据分析和建模之前,通常需要对数据进行标准化。标准化可以将不同变量的取值范围统一,避免因为变量取值范围不同而导致的模型偏差。 常见的标准化方法包括: - Z-score标准化 - 最小-最大标准化 - 小数定标标准化 ```python # Z-score标准化 from sklearn.preprocessing import StandardScaler scaler = StandardScaler() df['column'] = scaler.fit_transform(df[['column']]) # 最小-最大标准化 from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() df['column'] = scaler.fit_transform(df[['column']]) # 小数定标标准化 df['column'] = df['column'] / 10**np.ceil(np.log10(df['column'].abs().max())) ``` ## 数据编码 在进行数据分析和建模之前,通常需要对非数值型数据进行编码。编码可以将非数值型数据转换成数值型数据,方便模型进行计算。 常见的编码方法包括: - one-hot编码 - 标签编码 ```python # one-hot编码 from sklearn.preprocessing import OneHotEncoder encoder = OneHotEncoder() encoded = encoder.fit_transform(df[['column']]) df_encoded = pd.DataFrame(encoded.toarray(), columns=encoder.get_feature_names(['column'])) # 标签编码 from sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() df['column'] = encoder.fit_transform(df['column']) ``` ## 特征选择 在进行数据分析和建模之前,通常需要对特征进行选择。特征选择可以帮助我们选择最重要的特征,避免因为特征过多而导致的过拟合问题。 常见的特征选择方法包括: - 方差选择法 - 相关系数法 - 卡方检验法 - 互信息法 - 基于模型的选择法 ```python # 方差选择法 from sklearn.feature_selection import VarianceThreshold selector = VarianceThreshold(threshold=0.1) df_selected = selector.fit_transform(df) # 相关系数法 from sklearn.feature_selection import SelectKBest from scipy.stats import pearsonr selector = SelectKBest(score_func=pearsonr, k=5) df_selected = selector.fit_transform(df, target) # 卡方检验法 from sklearn.feature_selection import chi2 selector = SelectKBest(score_func=chi2, k=5) df_selected = selector.fit_transform(df, target) # 互信息法 from sklearn.feature_selection import mutual_info_classif selector = SelectKBest(score_func=mutual_info_classif, k=5) df_selected = selector.fit_transform(df, target) # 基于模型的选择法 from sklearn.feature_selection import SelectFromModel from sklearn.linear_model import LogisticRegression selector = SelectFromModel(LogisticRegression(penalty='l1', C=0.1)) df_selected = selector.fit_transform(df, target) ``` 以上就是常见的数据预处理方法和Python实现方式。在实际分析和建模中,我们需要根据具体情况选择合适的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值