Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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/9/loops/2.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
List 避免在列表上循环并从同一列表中弹出元素时忽略元素的方法_List_Loops_Conditional Statements - Fatal编程技术网

List 避免在列表上循环并从同一列表中弹出元素时忽略元素的方法

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次 之后,循环索

编程时的一个常见场景是,给定一个列表,当条件为真时,我们必须循环列表并从同一列表中弹出元素

现在,在这种情况下,比如说,我有一个列表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次

之后,循环索引将是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]