如何用无循环自定义函数按条件将numpy数组数值转为等级字符
问题
需要实现一个自定义函数,将数组中的数值按规则转换为字符串:
- 大于70的值转为
'P' - 小于70的值转为
'F'
示例:
- 输入
[20,80,30,100]→ 输出['F','P','F','P'] - 输入
[50,60,90,45]→ 输出['F','F','P','F']
要求:用自定义函数实现,且不得使用for、if、while等显式循环或条件语句。
当前代码无法满足需求,执行后仅返回固定元组:
def grade(input_array): a = len(input_array)>70 return 'P','F' grade([50,85,60,100])
当前输出:
('P', 'F')
解决方案
可以利用map()函数结合布尔值的索引特性实现,无需显式循环或条件语句:
def grade(input_array): return list(map(lambda x: ['F', 'P'][x > 70], input_array)) # 测试验证 print(grade([20,80,30,100])) # 输出: ['F', 'P', 'F', 'P'] print(grade([50,60,90,45])) # 输出: ['F', 'F', 'P', 'F'] print(grade([50,85,60,100])) # 输出: ['F', 'P', 'F', 'P']
实现说明
map()函数会自动遍历输入数组的每个元素,避免手写for循环- 布尔值在Python中可隐式转换为整数:
x > 70返回True(对应整数1)或False(对应整数0) - 通过列表索引
['F', 'P'][x > 70]直接获取对应结果,替代if条件判断逻辑 - 用
list()将map返回的迭代器转换为列表格式返回
内容的提问来源于stack exchange,提问作者Amelia Putri Damayanti
相关产品推荐
相关产品推荐

