Python中满足条件后终止嵌套for循环的实现方法
解决嵌套循环满足条件后终止内层循环的问题
直接修改方案:添加break语句
你的需求完全可以通过在满足条件的代码块后添加break实现,break只会终止当前的内层循环,外层循环会自动进入下一个k的迭代,正好符合你的要求。修改后的代码如下:
DATA_t = pd.read_excel('C:/Users/yo4226ka/Work Folders/Desktop/Teaching/IKER STUFF/iker1.xlsx',index_col=0, header = 0) DATA_1 = DATA_t[["Código de Provincia","Código de Municipio","Papeletas a candidaturas"]] cols_i= ["Código de Provincia","Código de Municipio","Papeletas a candidaturas"] X_1 = DATA_t["Papeletas a candidaturas"] X_2 = DATA_t.iloc[:,12:] X = pd.concat([X_1 ,X_2],axis=1) X_b = X.to_numpy() X_n = np.zeros((8070,1)) for k in range(np.shape(X_b)[1]): for i in range(np.shape(X_b)[0]): if k==0: pass else: if X_b[i,0] == 0: pass elif X_b[i,k]/X_b[i,0] > 0.002: X_n = np.c_[X_n,X_b[:,k]] break # 找到满足条件的i后,立即终止内层循环 else: pass
更高效的优化方案:用Numpy向量化操作替代嵌套循环
嵌套循环在处理大规模数据时效率很低,你可以利用Numpy的向量化特性直接判断整列是否存在满足条件的元素,完全省去内层循环:
DATA_t = pd.read_excel('C:/Users/yo4226ka/Work Folders/Desktop/Teaching/IKER STUFF/iker1.xlsx',index_col=0, header = 0) X_1 = DATA_t["Papeletas a candidaturas"] X_2 = DATA_t.iloc[:,12:] X = pd.concat([X_1 ,X_2],axis=1) X_b = X.to_numpy() X_n = np.zeros((8070,1)) # 直接从k=1开始迭代,跳过k=0的情况 for k in range(1, X_b.shape[1]): # 先过滤掉第一列为0的行,避免除零错误 valid_rows = X_b[:, 0] != 0 # 判断是否存在任意一行满足条件 if np.any( (X_b[valid_rows, k] / X_b[valid_rows, 0]) > 0.002 ): X_n = np.c_[X_n, X_b[:, k]]
这个方案不仅代码更简洁,执行速度也会比嵌套循环快很多,尤其当你的数据集行数较多时,优势会很明显。
内容的提问来源于stack exchange,提问作者Yusuf Kaddoura
相关产品推荐
相关产品推荐

