如何使用Python从循环中的数组中正确删除元素

时间:2017-06-29 05:46:04

标签: python python-2.7

我试图从数组中只删除一个元素并在循环中打印剩余的元素:

arr = [1,2,3,4,5]
for i in arr:
    a = arr
    a.remove(i)
    print a

所以我希望它打印出来:

[2, 3, 4, 5]
[1, 3, 4, 5]
[1, 2, 3, 5]
[1, 2, 3, 4]

为什么我会得到以下结果:

[2, 3, 4, 5]
[2, 4, 5]
[2, 4]

4 个答案:

答案 0 :(得分:4)

这是深拷贝和浅拷贝的经典问题。 Python通过引用复制数组。因此,对新变量(在您的情况下为a)的任何更改都将反映在主数组(arr)中。从a中删除元素也从arr中删除元素。 您需要使用以下内容来创建副本。

 a = arr[:] 

这不会删除arr。

中的任何元素

答案 1 :(得分:0)

您已经有解释,我会提供替代方案 - 您可以根据remove生成请求的输出:

arr = [1,2,3,4,5]
for i in arr:
    a = [x for x in arr if x != i]
    print a

(谨防arr中的非唯一元素,如果有的话,这些代码和你的代码都会以不同的方式产生意想不到的结果。)

答案 2 :(得分:0)

你可以试试这个。

<template>
    <div class="home-content">
        <h3>{{home | uppercase}}</h3>
    </div>
</template>
<script type="text/javascript">
    export default {
        data: function() {
            return {
                home: 'home'
            }
        },
        mounted: function() {
            this.$parent.$options.methods.makeConsole();
        }
    }
</script>

我认为这可以帮助你。

如果您没有任何重复值,也可以使用它。

arr = [1, 2, 3, 4, 5, 6, 7 ]
for index, item in enumerate(arr):
    print(arr[0:index] + arr[index+1:])

答案 3 :(得分:0)

Python列表是可变的,即对它们进行修改操作(如list.remove())不会生成新列表,而是修改现有列表,因此每个循环实际上都会永久修改源列表并丢失元素。您需要在每次要修改它时复制整个列表以实现所需,或者您可以创建一个包含元素的新列表,或者对于很长的列表,通过切片重建可能是性能最高的方式:

arr = [1,2,3,4,5]
for i in range(len(arr)):
    a = arr[0:i] + arr[i+1:]
    print(a)