删除所有负数并将其从一个列表移动到另一个列表-无效



我正试图将负数从一个数组移动到另一个数组。结果我遗漏了某些元素,例如-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)

相关内容

  • 没有找到相关文章

最新更新