单独调用list.remove与tolist后链式调用remove结果不一致的原因
问题原因解析
核心原因是Python中list.remove()是原地修改方法,没有返回修改后的列表,默认返回值为None:
- 拆分调用的场景
你首先将tolist()生成的列表对象赋值给my_list,再执行my_list.remove('-1')时,是直接修改my_list指向的列表对象本身,没有赋值操作,因此修改后的列表会保留在my_list变量中。
注:按你给出的初始列表['-1','32','63','-1'],单次remove('-1')只会删除第一个匹配的-1,得到['32','63','-1'],如果要删除所有-1,更建议用列表推导实现。 - 链式调用的场景
链式调用时,tolist()确实生成了目标列表,但后续调用的.remove('-1')返回值为None,你将这个None直接赋值给了my_list,因此最终变量存储的不是空列表,是None。
正确链式写法参考
如果要在链式调用中过滤掉所有-1,可以用列表推导实现:
my_list = [x for x in df.loc[df['ID'] == "9",['ID1','ID2','ID3','ID4']].values.flatten().tolist() if x != '-1']
内容的提问来源于stack exchange,提问作者user3234112
相关产品推荐
相关产品推荐

