Python 基本上只使用带有单个整数值的方括号从数组列表中删除重复项

Python 基本上只使用带有单个整数值的方括号从数组列表中删除重复项,python,arrays,duplicates,Python,Arrays,Duplicates,简而言之,可以直接在数组上使用的唯一操作是括号(​[整数值]​ ) 在这个问题中,我不允许将数据移动到另一个数据结构并返回列表 删除\u重复项删除阵列中的每个重复项 这是我目前的代码: class Array: def __init__(self): self.capacity = 4 self.size = 0 self.arr = [0] * self.capacity def insert(self, value,

简而言之,可以直接在数组上使用的唯一操作是括号(​[整数值]​ ) 在这个问题中,我不允许将数据移动到另一个数据结构并返回列表

删除\u重复项删除阵列中的每个重复项

这是我目前的代码:

class Array:
    def __init__(self):
        self.capacity = 4
        self.size = 0
        self.arr = [0] * self.capacity
    
    def insert(self, value, index):
        if index > self.size or index < 0:
            raise IndexOutOfBounds()
        if self.size >= self.capacity:
            self.resize()
        i = self.size
        while(i > index):
            self.arr[i] = self.arr[i - 1]
            i -= 1
        self.arr[index] = value
        self.size += 1
        if self.size > 1:
            self.is_ordered = False

    #adds to the back of the list
    def append(self, value):
        self.insert(value, self.size)
    
    def remove_duplicates(self):
        for i in range(0,self.size-1):
            if self.arr[i] == i:
                self.arr[i] = self.arr[i+1]
            self.size -= 1
    
    def __str__(self):
        str_val = ""
        for i in range(self.size-1):
            str_val += str(self.arr[i]) + ", "
        if self.size > 0:
            str_val += str(self.arr[self.size - 1])
        return str_val

    def resize(self):
        tmp_arr = [0] * self.capacity * 2
        for i in range(self.size):
            tmp_arr[i] = self.arr[i]
        self.arr = tmp_arr
        self.capacity *= 2

def test_array():
    array = Array()
    array.append(1)
    array.append(2)
    array.append(1)
    array.append(2)
    print(array)
    array.remove_duplicates()
    print(array)

test_array()

也许不是最有效的方法,但是您可以让一个helper函数“删除”给定索引中的项,在它离开1后移动所有内容,并减小
大小

def remove_at(self, index):
    # Shift everything after index left 1
    for i in range(index, self.size-1):
        self.arr[i] = self.arr[i + 1]
    self.size -= 1
        
def remove_duplicates(self):
    i = 0
    # Can't use for i in range(self.size) since self.size changes in loop
    while i < self.size:
        # Check each index after i to see if it is a dupe
        j = i + 1
        while j < self.size:
            if self.arr[i] == self.arr[j]:
                self.remove_at(j)
            else:
                j += 1
        i += 1
def remove_at(自身,索引):
#将索引左移1后的所有内容
对于范围内的i(索引,自身大小-1):
self.arr[i]=self.arr[i+1]
自我尺寸-=1
def删除重复项(自):
i=0
#无法用于范围内的i(self.size),因为self.size在循环中更改
而我
问题是什么?我应该在输出中得到1,2,但在
self中我只得到1。arr[i]==i
,你将一个值与它的索引进行比较,为什么会这样?修改你正在迭代的数据结构并不理想。现在我看到它self.arr[i]==我没有道理,有没有关于如何实施的建议?谢谢,这很有帮助
def remove_at(self, index):
    # Shift everything after index left 1
    for i in range(index, self.size-1):
        self.arr[i] = self.arr[i + 1]
    self.size -= 1
        
def remove_duplicates(self):
    i = 0
    # Can't use for i in range(self.size) since self.size changes in loop
    while i < self.size:
        # Check each index after i to see if it is a dupe
        j = i + 1
        while j < self.size:
            if self.arr[i] == self.arr[j]:
                self.remove_at(j)
            else:
                j += 1
        i += 1