如何删除python中字符串之间的非公共元素?

时间:2018-06-22 15:06:28

标签: python string

我要删除两个字符串中不相同的所有字母。

  

例如:

     

str1 ='abcdefg'

     

str2 ='efghijk'

删除不同的字符后,我想要得到:

  

str1 ='efg'

     

str2 ='efg'

我有以下代码:

for i in str1:
    if i not in str2:
        str1 = str1.replace("i", "")  #delete that element
                                      #strings are immutable so I create a new string and remove that element

然后,我将对其他字符串执行相同的操作。 但是,当我打印出来时,它并不会删除我想要的所有元素。或有时它不会删除任何元素。
我也尝试过使用double for循环,但是无法正常工作。 我的逻辑有问题吗?

4 个答案:

答案 0 :(得分:2)

您可以如下定义常见元素

common = set(str1) & set(str2)

然后,您可以简单地过滤字符串以不将那些元素包括为

str1 = ''.join([i for i in str1 if i in common])
str2 = ''.join([i for i in str2 if i in common])

答案 1 :(得分:1)

我只会使用简单的列表推导,然后将元素分配给字符串

new_str = ''.join([i for i in str1 if i in str2])

您的错误在这里:

str1 = str1.replace("i", "")

应该是

str1 = str1.replace(i, "")

请注意,此解决方案的输入大小为平方,效率相对较低,因此不适用于大型字符串。

答案 2 :(得分:1)

另一种方法(如果您不关心订单)是使用集合:

>>> str1 = 'abcdefg'
>>> str2 = 'efghijk'
>>> common = ''.join(set(str1) & set(str2))
>>> common
'feg'

答案 3 :(得分:0)

即使您关心订单,也可以使用集合。对其进行排序:

>>> 
>>> str1 = 'abcdefg'
>>> str2 = 'efghijk'
>>> ''.join(sorted(set(str1) & set(str2), key = str1.index))
'efg'
>>> ''.join(set(str1) & set(str2))
'egf'
>>> str2 = 'egfhijk'
>>> ''.join(set(str1) & set(str2))
'egf'
>>> ''.join(sorted(set(str1) & set(str2), key = str1.index))
'efg'
>>>