[英]Find different elements when comparing two lists
我有两个清单。 X
列表较大, Y
列表较小。 我想从Y
列表中找到唯一的元素。 含义:不属于X
列表中任何元素的元素,但也没有来自X
的元素属于它们的一部分。
例如: AA
是AAB
的一部分, AA B
是AA BB
的一部分,但C BB
和S
不是X
中任何元素的一部分。
此外,您会看到X
具有C A
,它是Y
中CC 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
Y
中的每个元素。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)
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.