繁体   English   中英

比较两个列表时找到不同的元素

[英]Find different elements when comparing two lists

我有两个清单。 X列表较大, Y列表较小。 我想从Y列表中找到唯一的元素。 含义:不属于X列表中任何元素的元素,但也没有来自X的元素属于它们的一部分。

例如: AAAAB的一部分, AA BAA BB的一部分,但C BBS不是X中任何元素的一部分。

此外,您会看到X具有C A ,它是YCC A的一部分,这是不允许的,因此它不在 output 中。

X = ["A A B", "A B C", "AA BB", "BB C A", "A C B", "BB C A", "X", "C A"]
Y = ["A A", "A C A", "AA B", "C BB", "S", "CC A"]

我已经尝试过这样的事情,在其他地方有不同的else ,但效果不佳:

for x in X:
    for y in Y:
        if x in y or y in x:
            continue
    else:
        print(y)

它只是多次打印CC A

要求的结果:

C BB
S
  • Go 覆盖Y中的每个元素。
  • 对于每一个, go 覆盖X中的每个元素。
  • 如果它们中的任何一个在任何方向上相互包含 - break
  • 否则,取项目:
X = ["A A B", "A B C", "AA BB", "BB C A", "A C B", "BB C A", "X", "C A"]
Y = ["A A", "A C A", "AA B", "C BB", "S", "CC A"]

for y in Y:
    for x in X:
        if y in x or x in y:
            break
    else:
        print(y)

给出:

C BB
S

这使用了for/else构造,这意味着只有在循环执行到耗尽时才会执行else部分,而不是break


或者,使用更短的方式any

for y in Y:
    if not any(y in x or x in y for x in X):
        print(y)

或者,根据德摩根定律,我们可以使用all

for y in Y:
    if all(y not in x and x not in y for x in X):
        print(y)

如果您不介意len(X) * len(Y)复杂性,您可以使用any

X = ["A A B", "A B C", "AA BB", "BB C A", "A C B", "BB C A", "X", "C A"]
Y = ["A A", "A C A", "AA B", "C BB", "S", "CC A"]

for y_el in Y:
    if any(y_el in x_el or x_el in y_el for x_el in X):
        continue
    print(y_el)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM