Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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 array.remove()未删除数组中的所有重复项_Python_Arrays_Remove - Fatal编程技术网

Python array.remove()未删除数组中的所有重复项

Python array.remove()未删除数组中的所有重复项,python,arrays,remove,Python,Arrays,Remove,所以我在做一个问题,尽管函数已经通过了测试用例,但我意识到有些地方不对劲 我有一个数组,它属于int类型,数组中可能有也可能没有重复的值。我需要做的是,删除所有重复项后,返回数组的len()。这应该在不创建新的数组的情况下完成,以获得O(1)时间效率 我找到了一个答案,它给出了一个很好的答案,我从中学到了一些新的东西,但我感到困惑的是下面的代码,它通过了测试用例,但通过在IDE中创建自己的代码,实际上并没有返回正确的返回长度。当我使用remove()方法时,它似乎只对数组中的第一个元素起作用。为

所以我在做一个问题,尽管函数已经通过了
测试用例
,但我意识到有些地方不对劲

我有一个
数组
,它属于
int
类型,数组中可能有也可能没有重复的值。我需要做的是,删除所有重复项后,返回
数组的
len()
。这应该在不创建新的
数组的情况下完成,以获得
O(1)
时间效率

我找到了一个答案,它给出了一个很好的答案,我从中学到了一些新的东西,但我感到困惑的是下面的代码,它通过了测试用例,但通过在IDE中创建自己的代码,实际上并没有返回正确的返回长度。当我使用
remove()
方法时,它似乎只对数组中的第一个元素起作用。为什么会这样

class Solution:
    def removeDuplicates(self, nums):
        if len(nums) <= 1:
            return f"No duplicates as length is only {len(nums)}"

        for i in nums:
            if nums.count(i) > 1:
                nums.remove(i)
        return len(nums)


p = Solution()
print(p.removeDuplicates([1, 1, 1, 1])) # Should return 1, returns: 2
print(p.removeDuplicates([1, 1, 2, 5])) # Should return 3, returns: 3
print(p.removeDuplicates([1, 2, 1, 2, 1])) # Should return 2, returns: 3
print(p.removeDuplicates([1, 2, 2, 1, 4, 2, 2, 2])) # Should return 3, returns: 4

类解决方案:
def移除副本(自身、nums):
如果len(nums)1:
nums.remove(i)
返回长度(nums)
p=溶液()
打印(p.removeDuplicates([1,1,1,1])#应返回1,返回:2
打印(p.removeDuplicates([1,1,2,5])#应返回3,返回:3
打印(p.removeDuplicates([1,2,1,2,1]))#应返回2,返回:3
打印(p.removeDuplicates([1,2,2,1,4,2,2,2]))#应返回3,返回:4

如果查看函数的迭代部分:

以NUM表示的i的
:
如果nums.count(i)>1:
nums.remove(i)
返回长度(nums)
您正在迭代列表
nums
,然后从相同的
num
列表中删除项目,这就是您面临的问题

记住:列表是可变的

为了避免这种情况,您可以迭代列表
索引
,而不是迭代列表
本身,也可以创建一个全新的列表

第一种方法:

num=[1,1,1,1]
对于范围内的i(len(num)-1,-1,-1):#按相反顺序迭代以避免索引器错误
如果num.count(num[i])>1:
num.remove(num[i])
nums#[1]
第二种方法:

num=[1,1,1,1]
结果=[]
对于num中的i:
如果我没有结果:
结果.追加(i)
结果#[1]

如果查看函数的迭代部分:

以NUM表示的i的
:
如果nums.count(i)>1:
nums.remove(i)
返回长度(nums)
您正在迭代列表
nums
,然后从相同的
num
列表中删除项目,这就是您面临的问题

记住:列表是可变的

为了避免这种情况,您可以迭代列表
索引
,而不是迭代列表
本身,也可以创建一个全新的列表

第一种方法:

num=[1,1,1,1]
对于范围内的i(len(num)-1,-1,-1):#按相反顺序迭代以避免索引器错误
如果num.count(num[i])>1:
num.remove(num[i])
nums#[1]
第二种方法:

num=[1,1,1,1]
结果=[]
对于num中的i:
如果我没有结果:
结果.追加(i)
结果#[1]

为什么不使用
set
?我不知道它会这样做,也没有想到它。。“我找到了一个答案,它给出了一个很好的答案,我从中学到了一些新东西”集合是无序的,尽管我认为你不能通过使用列表来实现
O(1)
comlexity无论如何,这种逐个删除重复项的方法是
O(N*M)
where
N=len(nums)
M
nums
中重复的总数,因为从列表中删除元素是
O(N)
,您需要执行
M次。这意味着在最坏的情况下,此解决方案具有二次运行时间!相比之下,
len(set(nums))
只需检查每个数字一次,这意味着它的总运行时间为
O(N)
。为什么不使用
set
?我不知道它会这样做,一开始也没有想到。。“我找到了一个答案,它给出了一个很好的答案,我从中学到了一些新东西”集合是无序的,尽管我认为你不能通过使用列表来实现
O(1)
comlexity无论如何,这种逐个删除重复项的方法是
O(N*M)
where
N=len(nums)
M
nums
中重复的总数,因为从列表中删除元素是
O(N)
,您需要执行
M次。这意味着在最坏的情况下,此解决方案具有二次运行时间!相比之下,
len(set(nums))
只需对每个数字进行一次检查,这意味着它的总运行时间为
O(N)
。是的,第一种方法就是这样。我知道我可以通过创建一个新的列表来做到这一点,但问题明确要求我不要这样做。谢谢你的投入是的,第一种方法就是。我知道我可以通过创建一个新的列表来做到这一点,但问题明确要求我不要这样做。谢谢你的意见