我要删除两个字符串中不相同的所有字母。
例如:
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循环,但是无法正常工作。
我的逻辑有问题吗?
答案 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'
>>>