无需if语句实现numpy数组排除首元素切片(单元素时保留原数组)
问题原因
你尝试的1 or None写法无法生效,原因是Python中or运算符会优先返回第一个布尔值为真的操作数,整数1属于真值,所以该表达式永远返回1,单元素数组执行[1:]切片必然得到空数组。
无显式if语句的实现方案
方案1:用min函数控制切片起始位
完全不需要任何判断逻辑,通过数组长度动态计算切片起始索引:
import numpy as np x = np.array([1,2,3,4,5]) y = np.array([1]) print(x[min(1, len(x)):]) # 输出 [2 3 4 5] print(y[min(1, len(y)):]) # 输出 [1]
逻辑说明:当数组长度大于1时,min(1, 数组长度)返回1,正常取除首元素外的所有内容;当数组长度为1时,返回0,从索引0开始切片等价于返回完整数组。如果需要适配高维数组,可以把len(arr)替换为numpy数组内置的arr.size属性。
方案2:三元表达式(无多行if块)
如果只是不需要写多行的if-else语句块,三元表达式的可读性更高,也符合需求:
res = arr[1:] if arr.size > 1 else arr
内容的提问来源于stack exchange,提问作者vsocrates
相关产品推荐
相关产品推荐

