我正在使用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))
显然尝试直接使用集合之间的差异是行不通的。 我试着写一些循环,但我更加困惑......
答案 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)
。