當使用set()
函數將列表轉換爲Python中的集合時,Python會嘗試通過從列表中刪除重複的值來簡化集合,如下例所示。在Python中的列表到集轉換期間保留列表值
In [1]: list = [1,4,1]
In [2]: list
Out[2]: [1, 4, 1]
In [3]: set = set(list)
In [4]: set
Out[4]: {1, 4}
此使用集時,計算該列表的屬性和轉換回,如在下面的矢量減法例子是不方便的。
In [1]: a = [1,1,1]
In [2]: a
Out[2]: [1, 1, 1]
In [3]: b = [1,2,3]
In [4]: b
Out[4]: [1, 2, 3]
In [5]: list(set(a) - set(b))
Out[5]: []
很明顯出了點問題:我們期待的操作{1-1, 1-2, 1-3} = {0, -1, -2}
。相反,我們有以下存儲的值。
In [6]: set(a)
Out[6]: {1}
In [7]: set(b)
Out[7]: {1, 2, 3}
這意味着我們正在計算{1-1, ?-2, ?-3} = ?
,這是無法完成的。
有沒有辦法在轉換爲集合時保留列表的結構和值以避免此問題?
顯然我不是在談減法列表:我在談論減法集。
爲什麼你需要設置一個向量減法? –
爲什麼你期待減法轉換爲數字減法? [集合文檔](https://docs.python.org/2/library/stdtypes.html#set.difference)清楚地表明'-'用於*集合差異*。 'set(a)--set(b)'中的任何元素產生一個* new *集合,其中'set(a)'中的所有元素都不會出現在'set(b)'中。由於'set(a)'只包含'1','set'也在'set(b)'中,所以你會得到一個空集。 –
向量不是集合,集合是向量操作的*錯誤工具*。 –