Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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
Python 在list类上创建插入和弹出方法_Python_Python 3.x_Class - Fatal编程技术网

Python 在list类上创建插入和弹出方法

Python 在list类上创建插入和弹出方法,python,python-3.x,class,Python,Python 3.x,Class,我需要实现一个insert方法(insert(self,index,val)),它在index之前插入val,以及一个pop方法(pop(self)),它将mylist中的最后一个元素删除到mylist类中。行为应该与python中已有的方法相同 注意:对于insert方法,与已经完成的append方法类似,如果没有额外元素的空间,数组的容量应该加倍。pop方法应该返回从列表中删除的元素,而不放任何元素 在数组中的位置。如果在空列表上调用pop,则索引器 应该提出例外情况 到目前为止,我的代码是

我需要实现一个insert方法(insert(self,index,val)),它在index之前插入val,以及一个pop方法(pop(self)),它将mylist中的最后一个元素删除到mylist类中。行为应该与python中已有的方法相同

注意:对于insert方法,与已经完成的append方法类似,如果没有额外元素的空间,数组的容量应该加倍。pop方法应该返回从列表中删除的元素,而不放任何元素 在数组中的位置。如果在空列表上调用pop,则索引器 应该提出例外情况

到目前为止,我的代码是:

import ctypes  # provides low-level arrays
def make_array(n):
    return (n * ctypes.py_object)()

class MyList:
    def __init__(self):
        self.data = make_array(1)
        self.capacity = 1
        self.n = 0

    def __len__(self):
        return self.n


    def append(self, val):
        if(self.n == self.capacity):
            self.resize(2 * self.capacity)
        self.data[self.n] = val
        self.n += 1

    def resize(self, new_size):
        new_array = make_array(new_size)
        for ind in range(self.n):
            new_array[ind] = self.data[ind]
        self.data = new_array
        self.capacity = new_size

    def extend(self, other):
        for elem in other:
            self.append(elem)

    def __getitem__(self, ind):
        if not(0 <= ind <= self.n - 1):
            raise IndexError('MyList index is out of range')
        return self.data[ind]

    def __setitem__(self, ind, val):
        if not(0 <= ind <= self.n - 1):
            raise IndexError('MyList index is out of range')
        self.data[ind] = val

mylst1 = MyList()
for i in range(5):
    mylst1.append(i)
import ctypes#提供低级数组
def make_阵列(n):
返回(n*ctypes.py_对象)()
类别列表:
定义初始化(自):
self.data=make_数组(1)
自容量=1
self.n=0
定义(自我):
返回自我
def附加(self,val):
如果(self.n==self.capacity):
自我调整大小(2*self.capacity)
self.data[self.n]=val
self.n+=1
def调整大小(自身、新大小):
新建数组=生成数组(新大小)
对于范围内的ind(self.n):
新数组[ind]=self.data[ind]
self.data=新数组
self.capacity=新尺寸
def扩展(自身、其他):
对于其他方面的elem:
self.append(elem)
定义获取项目(自我,索引):

如果不是(0考虑变量N可以根据需要而增长和收缩),则在追加时已经有n增长,因此对于POP函数考虑设置最后一个索引的值(在这种情况下是N)。设置为“无”,并从n中减去1。您还可以使用n来帮助查找抛出索引器的时间。对于insert,您首先需要检查容量,以确定当前数组上是否有足够的空间来放置另一个值。该函数与追加和调整大小的操作类似,即检查大小并使用多个值数组和在循环感谢中设置数据,我会考虑将最后一个索引设置为你建议的。米迦勒,它是你将要设置为空的索引的值。不是索引本身。索引是索引-1,考虑变量N可以根据需要而增长和收缩。或者POP函数考虑设置最后一个索引的值(在这种情况下是N)设置为“无”,并从n中减去1。您还可以使用n来帮助查找抛出索引器的时间。对于insert,您首先需要检查容量,以确定当前数组上是否有足够的空间来放置另一个值。该函数与追加和调整大小的操作类似,即检查大小并使用多个值数组和在循环感谢中设置数据时,我会考虑将最后一个索引设置为“没有”。米迦勒,它是将要设置为空的索引的值。而不是索引本身。索引将是索引- 1。