我写了下面的代码:
f = copy.deepcopy(features)
if best_att in features:
f = features.remove(best_att)
其中 features 是一个字符串列表,best_att 是一个字符串。有时代码工作正常,但有时我会遇到以下问题:
例如,如果 features = ['outlook', 'temperature', 'humidity', 'wind'] 和 best_att = 'outlook'。调试时,我看到它进入了if。但是,当尝试执行 remove 时,会出现错误:f is NoneType: None(即找不到字符串在列表中)。
知道为什么会这样吗?
请您参考如下方法:
应该是:
f = copy.deepcopy(features)
if best_att in f:
f.remove(best_att)
或
if best_att in features:
features.remove(best_att)
从您的代码看来,您想要更改原始功能,所以就这样做吧。如果您还想要它的深度复制 f,请在修改 features 之后创建它。
您收到该消息是因为 remove 返回 None:将其返回值分配给 f 后,这就是 f 的值 也是。通常,改变状态的 Python 内置方法“不返回任何东西”(它们返回 None)——它们“都是副作用”。返回值不是变异对象,也不是成功/失败标志。一些语言区分“过程”和“函数”;这些将是“程序”。
如果您想知道 best_att 是否在 features 中,请使用 features.find(best_att) 或 features .index(best_att).
