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

2024-06-28 11:33:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个对象定义如下:

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[]及其所有列表来访问(然后打印)所需的属性?你知道吗

到目前为止,我已经知道了这一点,但我知道语法是错误的:

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

Tags: 对象inselfnone列表for定义object
2条回答

你为什么不这样迭代列表:

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

在第一个循环中:

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)
    

相关问题 更多 >