当使用set()
函数将列表转换为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} = ?
,这是无法完成的。
为了避免这个问题,有没有办法在转换为集合时保留列表的结构和值?
显然,我不是在谈论减去列表:我在谈论减去集合。
答案 0 :(得分:0)
在这种情况下,我认为不需要set
。你可以zip
列表并像这样做一个减法
>>> a = [1,1,1]
>>> b = [1,2,3]
>>> [x-y for x,y in zip(a,b)]
[0, -1, -2]