我正试图将负数从一个数组移动到另一个数组。结果我遗漏了某些元素,例如-12和-14。
arr=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15]
arr1=[]
for i in arr:
if i < 0:
arr1.append(i)
arr.remove(i)
print (arr,arr1)
结果是:[1,2,3,4,5,6,7,8,9,10,-12,-14][-11,-13,-15]
为什么-12和-14没有移动?
当你在循环时移除arr中的一个元素时,这会改变下一轮的内容
正确的代码分为两步:
arr=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15]
arr1=[]
for i in arr:
print (i)
if i < 0:
arr1.append(i)
for i in arr1:
arr.remove(i)
print (arr,arr1)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [-11, -12, -13, -14, -15]
HTH-
您没有删除项目的原因只是因为在循环和同时删除时,指针索引只是跳下…
最好做两个循环,或者你坚持一个循环,然后从后面做。这是因为从后面操作,操作不会影响索引。
for x in arr[::-1]:
if x < 0:
arr1.append(x)
arr.remove(x)
>>> arr
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> arr1 # if orig. order is not important
[-15, -14, -13, -12, -11]
要了解原始代码中发生了什么:请运行以下命令:
for idx, x in enumerate(arr):
if x < 0:
print(idx, x)
arr1.append(x)
arr.remove(x)
print (arr,arr1)