从字符串中获取共同字符

14

我正在寻找一种比较两个字符串的方法,并能够分别获得以下内容:

  • 所有共同的字符,
  • 不同的字符(除了共同的字符以外的所有字符),
  • 仅存在一个字符串中的字符。

例如:

A = "123 ABC"
B = "135 AZ"

thingamajigger(A, B)  # would give all these:

intersect = "13 A"  # (includes space)
exclusion = "2BCZ5"
a_minus_b = "2BC"
b_minus_a = "5Z"

a_minus_b很简单......但是如果有那种花哨的一行代码可以实现,我也很乐意尝试。

for i in B:
    A = A.replace(i, "")

这有点像对字符串进行布尔运算。

1个回答

15

使用 set

s = set("123 ABC")
t = set("135 AZ")
intersect = s & t # or s.intersection(t)
exclusion = s ^ t # or s.symmetric_difference(t)
a_minus_b = s - t # or s.difference(t)
b_minus_a = t - s # or t.difference(s)

哇...当然...然后你只需要使用 "".join(set) 将它压缩成一个字符串!谢谢。 - Jollywatt
@Joseph:它真的很美,不是吗? :-) - jason
2
唯一的问题是,集合只包含唯一的元素。所以,假设我想从“Hello!”中减去“!”。使用“set('Hello!')- set('!')”将给出“Helo”。但是使用上面的替代方案“a_minus_b”就可以了。 :) - Jollywatt
1
@Joseph:我知道了。如果你想要的话,我会用"".join([c for c in A if c not in set(B)])它会比原来的方法高效得多(在长度上是加性而不是乘性)。 - jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接