2013-07-11 120 views
1
class Rating(): 
    def __init__(self, user, item, rating): 
     self.user = user 
     self.item = item 
     self.rating = rating 

    def __str__(self): 
     return str(user) + " " + str(item) + " " + str(rating) 

    def __repr__(self): 
     return str(user) + " " + str(item) + " " + str(rating) 


data = open('data.dat').readlines() 
records =() 

for i in data: 
    user, item, rating = i.split() 
    r = Rating(user, item, rating) 
    records += (r,) 
    print records 

data = [A, B, C],我期望records(<Record> A, <Record> B, <Record> C)。但是它包含(<Record> C, <Record> C, <Record> C)Python列表複製,而不是串聯

+1

'tuple's是不可變的'list's都沒有。試試'records = []'而不是 – inspectorG4dget

+3

@ inspectorG4dget我嘗試了一個列表,但是不使用列表不應該影響我連接元組的能力。 – jaynp

+2

@ inspectorG4dget儘管他並不試圖改變元組。 – arshajii

回答

7

您沒有使用類屬性,但全局變量已偶然規定。

return str(user) + " " + str(item) + " " + str(rating) 

應該看起來像

return str(self.user) + " " + str(self.item) + " " + str(self.rating) 
4

你的類的__str__爲基準的全局名稱:

def __str__(self): 
    return str(user) + " " + str(item) + " " + str(rating) 

這將是最後一次迭代:

user, item, rating = i.split() 

需要被修復d是self.userself.item等等

而且我會改變你的線是更有效,更符合Python:

records = [Rating(*line.split()) for line in data] 
+0

'* line.split()'是什麼,特別是星號是什麼意思? – jaynp

+0

@ user1850672請參閱[解包參數列表](http://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists)。 – arshajii