每次我向列表python添加一个新项时如何创建一个新对象

时间:2016-05-20 01:57:50

标签: python arrays oop

所以我有这样的问题:

array_of_things = [[is_shiny=False, is_bumpy=True]
                   [is_shiny=False, is_bumpy=False]
                   [is_shiny=True, is_bumpy=True]]

要访问某个项目,我会这样做:

if array_of_things[1][1] == True: #If the second item in list is bumpy
    print("The second item is bumpy")

但是,为了使我的代码更清晰,我希望像这样访问数组中的每个项目:

if array_of_things[1].is_bumpy == True: #If the second item in the list is bumpy
    print("The second item is bumpy")

我该怎么做?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

一个选项是使用dict,但如果您想要完全使用问题namedtuple中给出的语法,则可以使用

from collections import namedtuple

Thing = namedtuple('Thing', ['is_shiny', 'is_bumpy'])
array_of_things = [Thing(False, True), Thing(False, False), Thing(True, True)]

if array_of_things[1].is_bumpy == True:
    print("The second item is bumpy")

namedtuple创建一个新的tuple子类,其类型名称为first参数。可以使用索引访问字段,就像使用常规tuple一样,或使用在第二个参数中传递的字段名称。

答案 1 :(得分:2)

如果这些“事物”对你的程序有重要意义,我建议定义一个类,否则,使用dicts:

array_of_things = [{'is_shiny': False, 'is_bumpy': True},
                   {'is_shiny': False, 'is_bumpy': False},
                   {'is_shiny': True, 'is_bumpy': True}]

if array_of_things[1]['is_bumpy']:  # since it's a boolean, no need for `==`
    print("The second item is bumpy")