我有一个开始和结束节点列表以及每个节点的xy坐标。所以像这样:
Node A Node B
0 1
2 3
4 5
20 21
20 41
20 21
上表被解释为点0,其中(x_0,y_0)通过(x_1,y_1)连接到点1所以总共有6个列表节点A,节点B,X_A,Y_A,X_B,Y_B。 / p>
一条线重复20到21,所以它也在A和B的XY坐标列表中重复。我想从节点A和节点B列表中删除重复的节点以及X中的相应重复坐标Y列出A和B.我不知道该怎么做。
请注意,相同的节点可以连接到不同的节点,在这种情况下,20连接到21和41,但我只想删除第二个连接到21,因为它是重复的,而不删除20到41的连接。
最后我想得到:
Node A Node B
0 1
2 3
4 5
20 21
20 41
他们的坐标。
答案 0 :(得分:0)
假设您的号码在两个单独的列表中,
node_A = [0, 2, 4, 20, 20, 20]
node_B = [1, 3, 5, 21, 41, 21]
,您可以使用内置zip
函数将元素元素与元组组合使用,并使用fromkeys
中的dict
方法将元组作为字典的键。
node_AB = dict.fromkeys(zip(node_A, node_B))
由于字典的键是唯一的,它会自动删除重复的元组。 如果要将元组分离回列表,可以使用列表推导并将元组的每个第一个元素用于node_A,将元组的每个第二个元素用于node_B。
node_A_unique = [x[0] for x in node_AB]
node_B_unique = [x[1] for x in node_AB]
答案 1 :(得分:0)
如果这些行中的每一行都是一对,那么创建一对配对列表,然后将其转换为set
。
nodes = [
# A , B
( 0 , 1),
( 2 , 3),
( 4 , 5),
( 20 , 21),
( 20 , 41),
( 20 , 41),
]
print nodes
print set(nodes)
输出:
[(0, 1), (2, 3), (4, 5), (20, 21), (20, 41), (20, 41)]
set([(0, 1), (4, 5), (20, 21), (2, 3), (20, 41)])