我有两个列表:
nodes = [[nodeID1, x1, y1, z1],[nodeID2, x2, y2, z2],...,[nodeIDn, xn, yn, zn]]
和
subsetA_nodeID = [[nodeIDa], [nodeIDb], ....]]
我想比较这两个列表并返回一个新列表,其中 nodeIDs, x, y, z
的 nodes
与 nodeIDs 不匹配
。subsetA_nodeID
的
我可以这样做:
new_list = []
for line in nodes:
for nodeID,x,y,z in line:
for line2 in subsetA_nodeID:
if line2[0] == nodeID:
else:
new_list.append([line])
这段代码效率很低。我正在寻找一种快速的方法来做到这一点。我试过字典,但我找不到正确使用它们的方法。有什么想法吗?
谢谢!
最佳答案
我建议先展平 subsetA_nodeID
。
ssa_flat = [x for sublist in subsetA_nodeID for x in sublist]
或者,如果 subsetA_nodeID
中的每个子列表保证只包含一个元素:
ssa_flat = [x[0] for x in subsetA_nodeID]
如果节点是可散列的,请考虑将 ssa_flat
设为 set
。
ssa_flat = set(ssa_flat)
然后您可以像这样创建新列表:
lst = [x[0] for x in nodes if x[0] not in ssa_flat]
编辑:如果 lst
应该包含 [NodeID, x, y, z]
列表,只需更改第一个 x[0]
到最后一个列表理解中的 x
。
关于python - 比较两个列表并返回不匹配的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24496667/