如何在迭代Python中的嵌套列表时访问对象的属性?

时间:2014-04-03 16:56:38

标签: python list

我有一个对象定义如下:

class word(object): #object class

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

我有一个名为results []的列表,其中列表中的每个索引x都包含另一个长度为x的单词对象列表。例如。在结果[3]中,有一个长度为3的对象列表,其中一个对象可能是(dog,gdo,3)。我有一个名为maxL的值,表示列表结果[]的长度。如何通过迭代结果[]及其所有列表来访问(然后打印)我想要的属性?

这是我迄今为止所做的,但我知道语法错误:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)