Python:遍历属性并就地修改它们

时间:2018-11-17 02:40:44

标签: python loops

我有一个问题,我正在寻找一种解决问题的Python方法。我想做这样的事情:

def ConvertData(self):
    for dataSet in [self.trainData, self.testData]:
        convertedDataSet = ... do_something(dataSet) ...
        dataSet = convertedDataSet

因此,我想以相同的方式转换我所有的类属性,而不为每个属性复制该代码。但是我的方法却行不通。在上面的for循环中,最后,dataSet已正确转换。但是自然不会将其分配给self.trainData

什么是正确的编程方式

convertedDataSet = ... do_something(self.trainData) ...
self.trainData = convertedDataSet

convertedDataSet = ... do_something(self.testData) ...
self.testData = convertedDataSet

非常感谢! :)

编辑:我找到了getattrsetattr的解决方案:

def ConvertData(self):
    for attr in ["trainData", "testData"]:
        convertedDataSet = ... do_something(getattr(self, attr)) ...
        setattr(self, attr, convertedDataSet)

但是我还是不喜欢它。这是最好的方法还是有更好的解决方案?

1 个答案:

答案 0 :(得分:0)

您的问题与print(df) id name gpa grade 0 1111 Phineas 3.0 B 1 1113 Tilly 2.5 C 2 1110 Andres 3.8 A 3 1112 Jax 3.2 B 4 1114 Ray 3.1 B 5 1115 Koda 2.4 C 6 1120 Bruno 3.7 A 7 1134 Davis 2.6 C 8 1102 Cassie 4.0 A 无关,仅与attr有关。例如:

list

很明显,循环之后,numbers = [1, 2, 3] for number in numbers: number = 2 * number 仍然是numbers

要更改列表的元素,您需要使用[1, 2, 3]

enumerate