在Python中进行列表到集转换期间保留列表值

时间:2016-07-15 14:50:44

标签: python list set

当使用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} = ?,这是无法完成的。

为了避免这个问题,有没有办法在转换为集合时保留列表的结构和值?

显然,我不是在谈论减去列表:我在谈论减去集合。

1 个答案:

答案 0 :(得分:0)

在这种情况下,我认为不需要set。你可以zip列表并像这样做一个减法

>>> a = [1,1,1]
>>> b = [1,2,3]
>>> [x-y for x,y in zip(a,b)]
[0, -1, -2]