[英]Subtracting elements from array
因此,我試圖從數組中刪除元素,並對該數組進行一些計算。 問題是,我仍然想保留原始數組的副本,所以我創建了一個新數組,並為其分配了原始數組的值。 關鍵是,每當我打印出原始數組和新數組的長度時,它就給我相同的長度,但是卻給了我新數組的長度。 如何制作一個與'a'具有相同值但不更改'a'的新數組
a = [2, 4, 5, 7, 8, 9]
b = []
b = a
for _ in range(2):
m = min(b)
b[:] = (x for x in b if x != m)
print(len(b))
print(len(a))
說b = a
只會創建一個引用現有列表對象的新變量。 要復制列表,可以使用list()
函數或列表切片:
b = list(a)
b = a[:]
就是說,要從現有的列表中創建新列表以過濾掉某些元素,可以使用列表理解:
from heapq import nsmallest
m = nsmallest(2, a)
b = [x for x in a if x not in m]
list
和list[:]
之間有區別。
閱讀時, list
是對原始列表的引用, list[:]
淺表復制該列表。
分配時, list
(重新)綁定名稱和list[:]
切片分配,替換列表中先前的內容。
但是,如果list
元素是列表本身,那么即使list1 = list[:]
也有問題。 考慮:
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> b = a[:]
>>> b[0].remove(2)
>>> b
[[1, 3], [4, 5, 6], [7, 8, 9]]
>>> a
[[1, 3], [4, 5, 6], [7, 8, 9]]
發生這種情況是因為要復制到b的每個列表元素本身就是一個列表,並且列表的這種復制涉及正常list1 = list2
出現的相同問題。 最快捷的方法是通過這種方式顯式復制每個列表元素:
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> b=[[j for j in i] for i in a]
>>> b
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> b[0].remove(2)
>>> b
[[1, 3], [4, 5, 6], [7, 8, 9]]
>>> a
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
您不是要復制-是別名。 您給同一數組(第二個列表)命名。 嘗試b = a[:]
這將復制它-僅在列表內容不可變的情況下有效。
如果您的列表包含其他列表,它將“復制”對該列表的引用,但不“復制”嵌套列表的內容-這將是deepcopy()。
如果要刪除最低的2,也可以使用排序和切片(您的列表已經排序,因此無需排序)
a = [2, 4, 5, 7, 8, 9]
b = a[2:] // slice, ignore first 2 entries which are the lowest 2
c = sorted(a)[2:] // implicitly creates a new sorted list, ignore lowest 2
print(b)
print(c)
輸出:
[5, 7, 8, 9]
[5, 7, 8, 9]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.