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

2024-10-02 08:30:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python2.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]] 

我需要从第一个集合(TOT\u par)中提取第二个集合(POS\u in和POS\u par),即类似于:

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

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


Tags: inpos脚本new差异productlistrepeat
1条回答
网友
1楼 · 发布于 2024-10-02 08:30:31

你施法不够深入

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

set(POS_par)根本不起作用,因为它包含lists,一种不可损坏的类型

要解决此问题,请为每个list提供一个标准结构(类似于POS_par的嵌套list将很好地工作),将每个对转换为tuple,然后将tuple的容器转换为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)

相关问题 更多 >

    热门问题