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

时间:2015-07-04 15:37:57

标签: string python-3.x slice

这是源代码:

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))

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

4 个答案:

答案 0 :(得分:0)

首先,您不需要使用rangelen非常不理想的方式迭代字符串,因为字符串是可迭代的,您可以使用简单的循环迭代它们

要查找2个字符串中的交集,您可以使用set.intersection返回两个字符串中的所有常用字符,然后使用str.translate删除您的常用字符

intersect=set(str_one).intersection(str_two)

trans_table = dict.fromkeys(map(ord, intersect), None)
str_one.translate(trans_table)

答案 1 :(得分:0)

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中删除像这样的字符串中的字符,所以我将字符串拆分成部分(你也可以将它们转换成我在其他代码中删除的列表),其中所有的字符包括匹配字符前的最后一个字符,后跟匹配字符后的所有字符,然后将其附加到一个字符串中。

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

最后,我刚刚调用了函数而不是打印它,因为所有这一切都返回None类型。

答案 2 :(得分:0)

一种简单的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字符串是不可变的(即它们不能被修改)。这有很多原因。使用列表直到你别无选择,只有把它们变成字符串。"

答案 3 :(得分:0)

这些工作在Python 2.7+和Python 3

假设:

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

您可以使用一套:

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

然后使用maketrans中的该集合制作一个转换表,以{@ 1}}删除这些字符:

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'