我试图从数组中只删除一个元素并在循环中打印剩余的元素:
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]
答案 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)