2014-04-03 30 views
1

我有一個對象的定義如下:如何在遍歷Python中的嵌套列表時訪問對象的屬性?

class word(object): #object class 

    def __init__(self, originalWord=None, azWord=None, wLength=None): 
     self.originalWord = originalWord 
     self.azWord = azWord 
     self.wLength = wLength 

我有一個名爲結果[]列表,其中列表中的每個索引x包含長度x的字的對象的另一個列表。例如。在結果[3]中有一個長度爲3的對象列表,其中一個對象可能是(dog,gdo,3)。我有一個名爲maxL的值,它表示列表results []的長度。如何通過遍歷結果[]及其所有列表來訪問(然後打印)我想要的屬性?

這是我迄今爲止,但我知道的語法是錯誤的:

for x in range(0,maxL): 
    for y in results[x]: 
     print(results[x][y].azWord) 

回答

1

你爲什麼不只是遍歷列表,像這樣:

for row in results: 
    for item in row: 
     print(item.azWord) 

因爲你的榜樣results[x][y]在將是不正確的。 y是一個對象,而不是int,所以你不能用它來索引results。我只是使用上面的代碼來自己拉對象。

或者用更接近於原始的代碼

for x in range(0,maxL): 
    for y in results[x]: 
     print(y.azWord) # note y is the object itself, not an index 
+0

,似乎工作。結果我現在知道我的算法正在做一些有趣的事情......謝謝。 – Michi

1

在第一個循環:

for x in range(0,maxL): 

您是通過指數循環。在第二:

for y in results[x]: 

您通過元素循環。在這種情況下,通過列表中的元素。所以,你可以訪問屬性,如:

print(y.azWord) 
# ... 

注:

  • 我建議你遵循Python naming conventions。將您的班級命名爲Word

  • 我也建議你使用更具有代表性的名字,如:

    for i in range(0, maxL): 
        for element in results[i]: 
         print(element.azWord) 
    
  • 還可以通過在第一循環的元素循環。除非你要修改的內容或你需要使用索引你應該這樣做:

    for words_list in results: 
        for word in words_list: 
         print(word.azWord)