python - 比较两个列表并返回不匹配的项目

标签 python list compare

我有两个列表:

nodes = [[nodeID1, x1, y1, z1],[nodeID2, x2, y2, z2],...,[nodeIDn, xn, yn, zn]]

subsetA_nodeID = [[nodeIDa], [nodeIDb], ....]]

我想比较这两个列表并返回一个新列表,其中 nodeIDs, x, y, znodesnodeIDs 不匹配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/

相关文章:

python - numpy.searchsorted 二维数组

python - 检查元组列表是否相同

python - 如果出现,则在分隔符上拆分列表的字符串

c++ - 创建和比较两组卡片

php - 检查 PHP 中字符串数组中的子字符串

python - Django Rest Framework,查找字段配置不正确

python - 如何应用适当的阈值以去除二元板上的边缘

python - Django 查询集 : additional field for counting value's occurence

c - 双向链表没有正确创建

c++ - 如何为第二个值 "double"订购 set< pair< pair<int, int>, double >> ?