2015-07-04 48 views
1

這是源代碼:如何刪除使用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)) 

如何刪除發生在從第一個字符串兩個字符串一個字母,然後打印出來?

+1

'「」。加入(字母信str_one如果不信在str_two)' – njzk2

回答

0

如何做一個簡單的Python的方式,它

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中的字符串是不可變的(即不能進行修改)。有很多的原因。使用清單,直到你別無選擇,只有把它們變成絃樂。「

+0

'*'意思是'所有'在這裏? –

+0

這是一個打印列表(空格分隔)的Python 3.x方式,請參閱http://stackoverflow.com/a/15769313/2425366 – Shreevardhan

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

我使用Python 3.4 &intersect不再是內置的 –

+0

@KnoxRoot對不起,它的交叉口! – Kasramvd

+0

@poke它實際上是次優的! – Kasramvd

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類型。

+0

它總是返回'in' –

+0

我修改了它 – 83457

0

這些工作在Python 2中。7+和Python 3

考慮:

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

您可以使用一組:

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

然後使用該集maketrans做一個轉換表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' 
+0

它的工作完美..謝謝 –

相關問題