Python 给定一个非空整数数组nums,除了一个之外,每个元素都会出现两次。找到那个
有人能解释一下为什么这个代码不起作用吗?逻辑是,每当我发现一个重复的数字时,我会跳到前面的两个数字,并将该数字与后面的一个数字进行比较Python 给定一个非空整数数组nums,除了一个之外,每个元素都会出现两次。找到那个,python,arrays,Python,Arrays,有人能解释一下为什么这个代码不起作用吗?逻辑是,每当我发现一个重复的数字时,我会跳到前面的两个数字,并将该数字与后面的一个数字进行比较 谢谢。在“for循环”过程中,您无法编辑“for循环”将要交互的内容。例如,“对于范围(10)中的i”,意味着我将采用0,1,2,…,9的值。这是无法改变的。即使我以某种方式操纵I,比如“I=I+7”或“I=str(I)”,也不会改变我在每个循环开始时的状态。我不认为使用for循环可以尝试什么,因为就像@rdas提到的那样,通过增加我喜欢的循环,你不能向前跳。如
谢谢。在“for循环”过程中,您无法编辑“for循环”将要交互的内容。例如,“对于范围(10)中的i”,意味着我将采用0,1,2,…,9的值。这是无法改变的。即使我以某种方式操纵I,比如“I=I+7”或“I=str(I)”,也不会改变我在每个循环开始时的状态。我不认为使用for循环可以尝试什么,因为就像@rdas提到的那样,通过增加我喜欢的循环,你不能向前跳。如果你想坚持你的想法,那么你最好使用while循环(类似于下面的内容,可能需要更改)
nums.sort()
i=0
正如前面的答案所说,虽然i,但不能在for循环中更改i值
一种选择是对列表使用Python内置的count()函数:
nums.sort()
i = 0
while i <= len(nums)-1:
if i == len(nums)-1:
print(nums[i])
break
if nums[i] == nums[i+1]:
i += 2
else:
print(nums[i])
break
另一种解决方案是在collections包中使用counter方法,迭代数组项并检查计数是否等于1:
for x in nums:
if list(nums).count(x) == 1:
print(x)
python中的For循环与C中的For循环不同。这样增加i
是不可能的i
将始终从范围()中获取下一个值。
for x in nums:
if list(nums).count(x) == 1:
print(x)
[x for x, count in collections.Counter(nums).items() if count == 1][0]