从两个不同维度列表的差异中获取新列表

时间:2015-11-07 03:02:49

标签: python python-2.6

我正在使用Python 2.6.2,因为它与Abaqus一起安装(我正在为它编写脚本)

我在设置集之间存在差异时遇到问题。 我创建了三组,如下所示:

TOT_list = set(xrange(n_unitcells))                          
TOT_par = list(set(itertools.product(TOT_list, repeat = 2)))

结果

TOT_par = [(1, 3), (3, 0), (2, 1), (0, 3), (4, 0), (1, 2), (3, 3), (4, 4), (2, 2), (4, 1), (1, 1), (3, 2), (0, 0), (0, 4), (1, 4), (2, 3), (4, 2), (1, 0), (0, 1), (3, 1), (2, 4), (2, 0), (4, 3), (3, 4), (0, 2)]

POS_in = [0,0]                                               
POS_par = [[1,2],[2,3],[3,4]] 

我需要获取一个新集合,从第一个集合中提取第二个集合(POS_in和POS_par)(TOT_par),即类似于:

TOT_new = list(set(TOT_par) - set(POS_in) - set(POS_par))

显然尝试直接使用集合之间的差异是行不通的。 我试着写一些循环,但我更加困惑......

1 个答案:

答案 0 :(得分:0)

你不能深深地投射到set

>>> POS_in = [0,0]
>>> set(POS_in)
{0}

set(POS_par)根本不起作用,因为它包含list s,一种不可用的类型。

要解决此问题,请为每个list提供一个标准结构(list这样的嵌套POS_par可以正常运行),将每对转换为tuple,然后翻开tuple s'容器变成set

>>> POS_in = [[0,0]]
>>> POS_in_set = set(map(tuple, POS_in))
>>> POS_in_set
{(0, 0)}
>>> POS_par = [[1,2],[2,3],[3,4]]
>>> POS_par_set = set(map(tuple, POS_par))
>>> POS_par_set
{(1, 2), (2, 3), (3, 4)}

然后,您可以执行TOT_new = list(set(TOT_par) - POS_in_set - POS_par_set)