Python 基本上只使用带有单个整数值的方括号从数组列表中删除重复项
简而言之,可以直接在数组上使用的唯一操作是括号([整数值] ) 在这个问题中,我不允许将数据移动到另一个数据结构并返回列表 删除\u重复项删除阵列中的每个重复项 这是我目前的代码: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,
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