如何使用Python从循环中的数组中正确删除元素
我尝试从数组中仅删除一个元素,并在循环中打印其余元素:如何使用Python从循环中的数组中正确删除元素,python,python-2.7,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] 这是深拷贝与浅拷贝的经典问题。 Python通过引用复制数组。因此,在您的情
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]
这是深拷贝与浅拷贝的经典问题。 Python通过引用复制数组。因此,在您的情况下,对新变量a的任何更改都将反映在主数组arr中。从a中删除元素也会从arr中删除元素。 您需要使用以下命令创建副本
a = arr[:]
这不会从arr中删除任何元素。您已经得到了解释,我将提供一个替代方案-您可以在不使用remove的情况下生成请求的输出: 请注意arr中的非唯一元素,如果有,此代码和您的代码都将产生意外的结果,尽管方式不同。您可以尝试此方法
arr = [1, 2, 3, 4, 5, 6, 7 ]
for index, item in enumerate(arr):
print(arr[0:index] + arr[index+1:])
我想这对你有帮助
如果没有任何重复值,也可以使用该值
for item in arr:
print(set(arr) - set([item]))
Python列表是可变的,即修改诸如list.remove之类的操作不会生成新的列表,而是修改现有的列表,因此每个周期实际上都会永久性地修改源列表,并且元素会丢失。每次修改列表时,您都需要复制整个列表以实现所需,或者您可以创建一个排除元素的新列表,或者,对于非常长的列表,通过切片重建可能是最有效的方法:
arr = [1,2,3,4,5]
for i in range(len(arr)):
a = arr[0:i] + arr[i+1:]
print(a)
a=arr不创建arr的副本-大概您只需要a=arr[:]的可能副本我不确定这是否是副本,因为这个问题是问如何临时从数组中删除元素,实际上,意味着没有真正删除元素,而另一个正在询问如何永久删除元素。不太确定深度复制部分。这些项是整数,因此它们是不可变的。一个浅层的std副本可能也会有同样的效果,因为在本例中,我们实际上只关心容器对象。注意:当我谈到deep时,我指的是copy模块中使用的术语。你的是一个肤浅的副本-例如,如果它包含列表,你仍然会在它之后修改相同的项目。
arr = [1,2,3,4,5]
for i in range(len(arr)):
a = arr[0:i] + arr[i+1:]
print(a)