List 避免在列表上循环并从同一列表中弹出元素时忽略元素的方法
编程时的一个常见场景是,给定一个列表,当条件为真时,我们必须循环列表并从同一列表中弹出元素 现在,在这种情况下,比如说,我有一个列表a=[1,2,3,4,5,6,7,9,10],这个问题要求从列表中删除所有奇数元素 所以,我只是采取这样的方法List 避免在列表上循环并从同一列表中弹出元素时忽略元素的方法,list,loops,conditional-statements,List,Loops,Conditional Statements,编程时的一个常见场景是,给定一个列表,当条件为真时,我们必须循环列表并从同一列表中弹出元素 现在,在这种情况下,比如说,我有一个列表a=[1,2,3,4,5,6,7,9,10],这个问题要求从列表中删除所有奇数元素 所以,我只是采取这样的方法 for (int i=0; i<=a.length; i++) { if (a[i]%2 != 0) { a.removeElementAtIndex(i); } } 现在,这在列表a中最多可以工作6次 之后,循环索
for (int i=0; i<=a.length; i++) {
if (a[i]%2 != 0) {
a.removeElementAtIndex(i);
}
}
现在,这在列表a中最多可以工作6次
之后,循环索引将是6,这将引用列表中的7。由于7是一个奇数,它将从列表中删除7
现在,循环索引将是7,它将指向列表中的10。列表中的元素9现在位于索引6处,循环已经检查了索引6
因此,这种方法将导致错误
问题:这种方法不会导致上述情况,并且只使用一个列表并在元素上循环一次。一般来说,不更改当前迭代的列表是一种常见做法。而是使用一个新的列表或过滤器方法 但是,每次删除项目时,您都可以删除i计数器,如下所示:
for (int i=0; i<=a.length; i++) {
if (a[i]%2 != 0) {
a.removeElementAtIndex(i);
i--;
}
}
听起来你在使用JS。为什么不使用array.filter?这将遍历中的所有元素,并仅返回与条件匹配的值。所以var results=a.filterfunctionelement{//如果元素为偶数,则返回true的逻辑@nraduka它通过这样做创建了一个新列表,他想就地更改列表。如果你真的坚持不创建新列表,你可以在每次删除项目时减少i。啊,好的。我当时误解了@Dean Fenster有正确的想法这是一个无限循环!你自己试试吧!而i-导致JS中的i减小。但是在像python这样的语言中,i只在当前迭代中减少,下一次迭代的值只是它通常应该的值。因此,很明显,它与python无关。@Arunava您使用的是什么语言。我给出了一般方法,因为您没有指定语言。我使用了递归。执行此操作。对于我删除的每个项目,我都检查了下一个元素。如果它也很奇怪,我就把它弹出。Python@DeanFenster
In [3]: i = 0
In [4]: a = list(range(12))
In [5]: while i < len(a):
...: if a[i] % 2 != 0:
...: a.remove(a[i])
...: i -= 1
...: i += 1
...:
In [6]: a
Out[6]: [0, 2, 4, 6, 8, 10]