为什么这会返回一个空列表?
Why is this returning an empty list?
不太确定我在这里做错了什么。
我正在尝试将输入列表中的所有值转换为浮点数。
然后打印出新转换的值。
class Data_Manager:
def __init__(self, input_data):
self.data = input_data
self.out_list = []
self.get_single_data = self.get_single_data(value=self.data)
def get_single_data(self, value):
try:
success, value = True, float(value)
except:
success, value = False, value
return success, value
def convert_data(self):
output_list = [self.get_single_data(value)[1] for value in self.data if self.get_single_data(value)[0]]
self.out_list.append(output_list)
return output_list
def display(self):
return self.out_list
if __name__ == "__main__":
input_data = ["4.1",22,-12,-1,"25","?",0.55,"w",-3.6,"Z",22.12]
dm = Data_Manager(input_data)
print(dm.display())
>>[]
你的 display
函数只有 returns out_list
你初始化为空。你没有在任何地方调用你的 convert_data
函数。
我不知道为什么 python 接受该代码,但我认为你失败的是这一行
self.get_single_data = self.get_single_data(value=self.data)
您正在使用类似 属性 的函数。
如果你使用这条线,它可以工作 self.out_list = self.get_single_data(value=self.data)
首先,在您的代码 self.get_single_data = self.get_single_data(value=self.data)
的第五行中,您是 re-assigning def get_single_data
方法到相同方法的结果,即 tuple
。在您的 if __name__ == "__main__":
块中,当您调用代码 dm.display()
时,它只有 returns self.out_list
这是一个空列表。
现在您可以调用 dm.convert_data()
方法,它将执行所有操作并填充 self.out_list
但请记住,在您的 __init__
方法中,您有 re-assigned get_single_data
方法到相同方法的输出,因此当您调用 convert_data
时,您将得到 TypeError
.
您可以在 __init__
方法中删除此行 self.get_single_data = self.get_single_data(value=self.data)
或将 self.get_single_data
重命名为其他名称。
试试这个解决方案:
class Data_Manager:
def __init__(self, input_data):
self.data = input_data
self.out_list = []
def get_single_data(self, value):
try:
success, value = True, float(value)
except:
success, value = False, value
return success, value
def convert_data(self):
output_list = [self.get_single_data(value)[1] for value in self.data if self.get_single_data(value)[0]]
self.out_list.append(output_list)
return output_list
def display(self):
return self.out_list
if __name__ == "__main__":
input_data = ["4.1", 22, -12, -1, "25", "?", 0.55, "w", -3.6, "Z", 22.12]
dm = Data_Manager(input_data)
dm.convert_data()
print(dm.display())
[[4.1, 22.0, -12.0, -1.0, 25.0, 0.55, -3.6, 22.12]]
不太确定我在这里做错了什么。 我正在尝试将输入列表中的所有值转换为浮点数。 然后打印出新转换的值。
class Data_Manager:
def __init__(self, input_data):
self.data = input_data
self.out_list = []
self.get_single_data = self.get_single_data(value=self.data)
def get_single_data(self, value):
try:
success, value = True, float(value)
except:
success, value = False, value
return success, value
def convert_data(self):
output_list = [self.get_single_data(value)[1] for value in self.data if self.get_single_data(value)[0]]
self.out_list.append(output_list)
return output_list
def display(self):
return self.out_list
if __name__ == "__main__":
input_data = ["4.1",22,-12,-1,"25","?",0.55,"w",-3.6,"Z",22.12]
dm = Data_Manager(input_data)
print(dm.display())
>>[]
你的 display
函数只有 returns out_list
你初始化为空。你没有在任何地方调用你的 convert_data
函数。
我不知道为什么 python 接受该代码,但我认为你失败的是这一行
self.get_single_data = self.get_single_data(value=self.data)
您正在使用类似 属性 的函数。
如果你使用这条线,它可以工作 self.out_list = self.get_single_data(value=self.data)
首先,在您的代码 self.get_single_data = self.get_single_data(value=self.data)
的第五行中,您是 re-assigning def get_single_data
方法到相同方法的结果,即 tuple
。在您的 if __name__ == "__main__":
块中,当您调用代码 dm.display()
时,它只有 returns self.out_list
这是一个空列表。
现在您可以调用 dm.convert_data()
方法,它将执行所有操作并填充 self.out_list
但请记住,在您的 __init__
方法中,您有 re-assigned get_single_data
方法到相同方法的输出,因此当您调用 convert_data
时,您将得到 TypeError
.
您可以在 __init__
方法中删除此行 self.get_single_data = self.get_single_data(value=self.data)
或将 self.get_single_data
重命名为其他名称。
试试这个解决方案:
class Data_Manager:
def __init__(self, input_data):
self.data = input_data
self.out_list = []
def get_single_data(self, value):
try:
success, value = True, float(value)
except:
success, value = False, value
return success, value
def convert_data(self):
output_list = [self.get_single_data(value)[1] for value in self.data if self.get_single_data(value)[0]]
self.out_list.append(output_list)
return output_list
def display(self):
return self.out_list
if __name__ == "__main__":
input_data = ["4.1", 22, -12, -1, "25", "?", 0.55, "w", -3.6, "Z", 22.12]
dm = Data_Manager(input_data)
dm.convert_data()
print(dm.display())
[[4.1, 22.0, -12.0, -1.0, 25.0, 0.55, -3.6, 22.12]]