如何使用 python 删除两个字符串中出现的字母?

How can I delete the letter that occurs in the two strings using python?

这是源代码:

def revers_e(str_one,str_two):
    for i in range(len(str_one)):
        for j in range(len(str_two)):
            if str_one[i] == str_two[j]:
               str_one = (str_one - str_one[i]).split()
               print(str_one) 
            else:
               print('There is no relation')  

if __name__ == '__main__':
str_one = input('Put your First String: ').split()
str_two = input('Put your Second String: ')
print(revers_e(str_one, str_two))

如何从第一个字符串中删除两个字符串中都出现的字母然后打印它?

首先,您不需要使用 rangelen 来迭代字符串,因为字符串是可迭代的,您只需使用一个简单的循环即可迭代它们.

为了在 2 个字符串中找到交集,您可以使用 set.intersection 两个字符串中的所有常用字符 returns 然后使用 str.translate 删除常用字符

intersect=set(str_one).intersection(str_two)

trans_table = dict.fromkeys(map(ord, intersect), None)
str_one.translate(trans_table)
def revers_e(str_one,str_two):
    for i in range(len(str_one)):
        for j in range(len(str_two)):
          try:

            if str_one[i] == str_two[j]:
               first_part=str_one[0:i]
               second_part=str_one[i+1:]
               str_one =first_part+second_part
               print(str_one)

            else:
               print('There is no relation')

          except IndexError:
                return


str_one = input('Put your First String: ')
str_two = input('Put your Second String: ')
revers_e(str_one, str_two)

我已经修改了您的代码,删除了一些位并添加了更多位。

str_one = input('Put your First String: ').split()

我删除了 .split(),因为所有这一切都会创建一个长度为 1 的列表,因此在您的循环中,您将比较第一个字符串的整个字符串与第二个字符串的一个字母字符串.

  str_one = (str_one - str_one[i]).split()

你不能从 Python 中这样的字符串中删除一个字符,所以我将字符串分成几部分(你也可以将它们转换成列表,就像我在我删除的其他代码中所做的那样)其中包括匹配字符之前的最后一个字符之前的所有字符,然后是匹配字符之后的所有字符,然后将它们附加到一个字符串中。

我使用了异常语句,因为第一个循环将使用原始长度,但这可能会发生变化,因此可能会导致错误。

最后,我只是调用函数而不是打印它,因为所做的只是 return 一个 None 类型。

一个简单的 pythonic 方法怎么样

def revers_e(s1, s2):
    print(*[i for i in s1 if i in s2])    # Print all characters to be deleted from s1
    s1 = ''.join([i for i in s1 if i not in s2])    # Delete them from s1

This answer 说,"Python strings are immutable (i.e. they can't be modified). There are a lot of reasons for this. Use lists until you have no choice, only then turn them into strings."

这些在 Python 2.7+ 和 Python 3

中有效

鉴于:

>>> s1='abcdefg'
>>> s2='efghijk'

您可以使用一组:

>>> set(s1).intersection(s2)
{'f', 'e', 'g'}

然后使用 maketrans 中的设置将 table 翻译成 None 以删除这些字符:

>>> s1.translate(str.maketrans({e:None for e in set(s1).intersection(s2)}))
'abcd'

或使用列表理解:

>>> ''.join([e for e in s1 if e in s2])
'efg'

还有一个正则表达式来生成一个没有常用字符的新字符串:

>>> re.sub(''.join([e for e in s1 if e in s2]), '', s1)
'abcd'