我试图在一个类中创建一个列表,然后在该列表中声明元素。 我什至不知道这是否是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()
答案 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。