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

2 投票
2 回答
524 浏览
提问于 2025-04-18 01:12

我有一个对象,定义如下:

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 的单词对象列表。例如,在 results[3] 中,有一个长度为 3 的对象列表,其中一个对象可能是 (dog, gdo, 3)。我还有一个叫 maxL 的值,它表示 results[] 列表的长度。我该如何遍历 results[] 及其所有列表,以访问(并打印)我想要的属性呢?

这是我目前的代码,但我知道语法是错的:

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

2 个回答

2

在第一个循环中:

for x in range(0,maxL):

你是在遍历索引。在第二个循环中:

for y in results[x]:

你是在遍历元素。在这个例子里,就是在遍历一个列表里的元素。所以你可以像这样访问属性:

print(y.azWord)
# ...

注意:

  • 我建议你遵循Python的命名规范。把你的类命名为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)
    
2

你为什么不直接像这样遍历列表呢:

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

因为在你的例子中,results[x][y] 是不对的。y 是一个对象,不是一个整数,所以你不能用它来从 results 中索引。我建议你使用上面的代码来直接获取对象。

或者你可以用一种更接近你原始代码的方式:

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

撰写回答