How would I get to return a list from the class, right now its just returning the location
class ListNode:
def __init__(self, val=[]):
self.val = val
def __iter__(self):
return iter(self.val)
def file_reader(file_path):
list_of_num = []
with open(file_path, "rt") as fout:
reader = csv.reader(fout, delimiter=",")
for line in reader:
list_of_num.append(line)
return list_of_num
def list_instances():
lists = file_reader(list_path)
final_list = ListNode(lists)
return final_list
if __name__=="__main__":
file_reader(list_path)
print(list_instances())
Any ideas, I think it has something to do with the iter object
CodePudding user response:
The problem is the ListNode class, which doesn't do anything other than wrap a regular list (it also has a potential bug related to the mutable default arg in the constructor that might bite you later), and it doesn't wrap the __str__ method that provides pretty-printing.
The easiest way to solve the problem is to just not use ListNode:
def list_instances():
return file_reader(list_path)
Now your print call will receive a list instead of a ListNode and it will print the contents of the list.
You can also write file_reader() more simply as:
def file_reader(file_path):
with open(file_path, "rt") as fout:
return list(csv.reader(fout))
since csv.reader is an iterable, and passing an iterable to list() will give you a list of its contents; you don't need to write the for loop yourself and individually append each element.
