我尝试从一个数组中仅删除一个元素,并在循环中打印剩余的元素:
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]
我尝试从一个数组中仅删除一个元素,并在循环中打印剩余的元素:
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]
a = arr[:]
这不会从 arr 中删除任何元素。
你已经有了解释,我提供一个替代方案 - 你可以在完全不使用remove
的情况下生成所需的输出:
arr = [1,2,3,4,5]
for i in arr:
a = [x for x in arr if x != i]
print a
(注意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
does not create a copy ofarr
- presumably you just needa = arr[:]
- AChampion