在课程中创建和声明列表

时间:2019-05-22 02:29:30

标签: python python-3.x

我试图在一个类中创建一个列表,然后在该列表中声明元素。 我什至不知道这是否是python的正确方法。我有一些Java背景。

我没有在列表中手动添加10个元素,因为我觉得创建动态列表会更有用。

class Levels:
    def __init__(self):
        self.type = "A"
        self.size = [] # trying to create a list for 10 elements. 
        self.makespace(self.size) # running this method to create 10 spaces and then declare them. 


    def makespace(self, size):
        for i in range(0,10):
            if(size[i] == None):
                size[i] = "free"
                print(i)
           else:
            print("Didn't work")
            print(i)



test = Levels()

3 个答案:

答案 0 :(得分:0)

此代码将无法工作,因为size[i]不存在。而是使用size.append(...)。另外,您应该将数字传递给makespace,以便可以为任意数量的项目腾出空间。

class Levels:

    def __init__(self, kind='A', size=10):
        self.kind = kind
        self.size = [ 0 for _ in range(10) ]

这些细微的变化使您的代码更加健壮和更加Python化。

首先但最不重要的是,type是一种内置方法(既是类又是类型),因此kind通常被替换。

第二,您可以将默认参数传递给构造函数(或任何函数),因为通常应避免在函数内部使用常量。在这里,您可以随意设置Level的类型以及所需的初始空间。

第三使用列表理解,您可以创建任意大小(或元素)的列表。语法是

[ expression for args in iterable ]

允许基于从迭代器传递的参数生成任何表达式。了解有关列表理解和其他数据结构here的更多信息。

对于您的makespace,您实际上并不需要它,但是您可以更改实现,以便可以分配更多空间(使用self.size.append(...))或覆盖当前使用的空间。

祝你好运!

答案 1 :(得分:0)

您的问题就在这里。

            if(size[i] == None):
                size[i] = "free"
                print(i)

此刻,size为空,它不包含任何元素,所以为什么呢? 检查size[i] == None? 您可能认为python列表的行为类似于Java中的数组,其中它使用null初始化所有内容?即使在这里您没有在 init 构造函数中声明列表的大小,所以我很好奇您对此的看法。

您的代码应如下所示:

class Levels:
    def __init__(self):
        self.type = "A"
        self.size = [] # trying to create a list for 10 elements. 
        self.makespace(self.size) # running this method to create 10 spaces and then declare them. 


    def makespace(self, size):

        #This will fill the emty list with 10 None(null) values
        for i in range(0,10):
            size.append(None)



test = Levels()

还有一个好处:

class Levels:
    def __init__(self):
        self.type = "A"
        self.size = []

        #Notice that I'm not passing self as an argument when I call makespace()

        self.makespace()


    def makespace(self):

        #This will fill the emty list with 10 None(null) values
        for i in range(0,10):
            self.size.append(None)



test = Levels()

Self是python中的 this 关键字,不同之处在于,在Python中,您仅需要在声明方法时(而不是在调用它们时)将其作为参数传递给,并且您也可以随便命名!

希望这会有所帮助!

答案 2 :(得分:-1)

我不确定您要在这里做什么。

如果您希望在初始化时列表中有10个可用空间,请更改

self.size = [] 

self.size = [“free”] * 10

如果要从空列表开始并在makespace循环中添加10个可用空间,只需使用

self.size.append(“free”)

此外,您实际上不需要传递大小来腾出空间。由于您已经传递了self,因此我只会在makespace函数中引用self.size。