Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用“ADT对象实例”填写不同ADT对象实例的列表*&引用;用python_Python - Fatal编程技术网

使用“ADT对象实例”填写不同ADT对象实例的列表*&引用;用python

使用“ADT对象实例”填写不同ADT对象实例的列表*&引用;用python,python,Python,我试图创建一个类似ADT的列表,其中包含另一个ADT的实例。 我在其他情况下使用了“None”,但我在这里没有“None”检查的用处,所以我尽量不使用它 myList = [MyAdt()] * 10 所以基本上就是创建这个实例,然后乘以10倍。关于如何调整以创建新实例,有什么想法吗 **如果你愿意,我会给你ADT,但我认为它们不相关** 创建一个包含10个MyAdt实例的列表,而不是10个指向一个实例的变量,可以使用: myList = [MyAdt() for i in range(10)

我试图创建一个类似ADT的列表,其中包含另一个ADT的实例。 我在其他情况下使用了“None”,但我在这里没有“None”检查的用处,所以我尽量不使用它

myList = [MyAdt()] * 10
所以基本上就是创建这个实例,然后乘以10倍。关于如何调整以创建新实例,有什么想法吗


**如果你愿意,我会给你ADT,但我认为它们不相关**

创建一个包含10个MyAdt实例的列表,而不是10个指向一个实例的变量,可以使用:

myList = [MyAdt() for i in range(10)]

你想要什么

my_list = [MyAdt() for _ in range(10)]
myu列表
创建10个不同的
MyAdt()实例


顺便说一句,您的原始代码仍然是O(n),尽管对列表中的每个元素重复使用了相同的引用。使用单个
*
操作编写的事实并不会改变这一点;在这种情况下,
*
本身不是O(1)操作。它的操作数是
list
int
,这使得它与两个操作数都是数字类型时计算的函数完全不同。

我不知道O(1)对您意味着什么,但如果它对我来说的意思相同,那么它意味着与您要构建的
adt
实例数相比是常数。如果这是正确的,那就不可能了。根据定义,你的“复杂性”是θ(n)

现在,如何正确实例化是另一个问题,但这里有一个可能的答案:

classmyadt:
计数=0
定义初始化(自):
self.a=MyAdt.count
MyAdt.count+=1
定义报告(自我):
返回str(self.a)
列表大小=10
myList=[MyAdt()]*列出了大小
打印(myList)
myList=[MyAdt()用于范围内的(列出大小)]
打印(myList)
其中打印:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]  # 10 refs to the same instance
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 10 distinct instances

请注意,第二个列表的第一项打印“1”,因为它是我们创建的第二个实例,而不是第一个实例

你想要一个包含
MyAdt
类的十个实例的列表吗?是的,但是我失去了O(1)时间复杂性。谢谢你的指点,我会把它作为备份的!您可以通过不执行列表乘法来调整它。参见
[MyAdt()]*10
一开始就不是O(1);它仍然是O(n),因为您必须用10个引用填充列表;它们是对同一个对象的引用这一事实是无关紧要的。感谢这些指针,我刚刚计算了list.append是O(1),而我的“10”最好一直解释为“n”。我想我会把这归咎于睡眠不足,让自己感觉更好