Python中不使用for循环实现数组元素条件替换
无需显式for循环实现数组转换方案
给定两个数组arr_1和arr_2,需生成输出数组arr_out:当两数组对应下标的元素乘积为0时,arr_out对应位置设为-1;否则保留arr_1对应位置的元素。示例如下:
arr_1 = [21, 28, 36, 29, 40] arr_2 = [0, 225, 225, 0, 225] arr_out = [-1, 28, 36, -1, 40]
已通过for循环实现该逻辑,询问是否可不使用显式for loop完成此需求?
以下是两种可行方案:
1. Python原生列表推导式
这是最简洁的原生实现,无需编写显式的for循环块(底层仍有循环,但代码层面更紧凑):
arr_1 = [21, 28, 36, 29, 40] arr_2 = [0, 225, 225, 0, 225] arr_out = [-1 if a * b == 0 else a for a, b in zip(arr_1, arr_2)]
通过zip将两个数组的对应元素配对,再用三元表达式判断乘积是否为0,直接生成目标数组。
2. NumPy向量化操作
如果处理大规模数组,NumPy的向量化操作效率远高于Python循环(操作在C层面执行,无Python级别的循环开销):
import numpy as np arr_1 = np.array([21, 28, 36, 29, 40]) arr_2 = np.array([0, 225, 225, 0, 225]) # 生成掩码:标记乘积为0的位置 mask = (arr_1 * arr_2) == 0 # 根据掩码替换元素 arr_out = np.where(mask, -1, arr_1) # 如需转回普通Python列表,执行以下操作 # arr_out = arr_out.tolist()
内容的提问来源于stack exchange,提问作者harinsamaranayake
相关产品推荐
相关产品推荐

