Python 按指定占比从已有列表提取元素生成新列表的问题求解
代码问题排查与修复
你的代码存在3个核心错误,直接导致运行结果不符合预期:
- 切片操作未指定原序列:
possible_stop_words = [:x]是非法写法,Python无法识别要对哪个列表做切片,你本地能运行大概率是这段代码简化时漏写了列表名,实际写的是list[:x] - 占比计算逻辑完全颠倒:取原列表对应百分比的元素,正确计算逻辑是
总长度 * 百分比,但你写成了总长度 / 百分比。举个例子:原列表长度为100,输入百分比为10,按你的写法会得到100/(10/100) = 1000,x值为999,远大于原列表长度,Python列表切片当结束下标超过列表长度时,会直接返回整个列表,这就是你得到的结果始终和原列表一致的根本原因 - 参数命名不规范:用
list作为参数名会覆盖Python内置的list类型,属于高危写法,建议替换为自定义的参数名如origin_list
修复后的可用代码
def select_stop_words(percent, origin_list): l = len(origin_list) # 计算要截取的元素个数,加边界处理避免超过列表长度 select_count = min(int(l * percent / 100), l) # 默认取列表前select_count个元素,可根据需求调整切片规则 possible_stop_words = origin_list[:select_count] return possible_stop_words
测试示例
输入列表为[1,2,3,4,5,6,7,8,9,10],百分比为30,调用函数返回结果为[1,2,3],符合预期。
内容的提问来源于stack exchange,提问作者Vickytoria
相关产品推荐
相关产品推荐

