2015-04-05 74 views
1

好吧,所以我試圖製作一個函數,它將採用一個字符串和一系列項(以列表,元組或字符串的形式)並刪除所有項來自該列表的來自字符串的項目。從字符串中刪除序列中的項目Python

到目前爲止,我的嘗試是這樣的:

def eliminate(s, bad_characters): 
    for item in bad_characters: 
     s = s.strip(item) 
    return s 

然而,由於某些原因,當我嘗試這樣或這樣的變化,它只返回要麼是原始的字符串或者僅bad_characters第一項的版本除去。

>>> eliminate("foobar",["o","b"]) 
'foobar' 

有沒有辦法從給定的字符串中刪除bad_characters中的所有項目?

回答

1

嘗試更換壞字符爲空字符串。

def eliminate(s, bad_characters): 
    for item in bad_characters: 
     s = s.replace(item, '') 
    return s 

strip(),因爲它試圖只刪除原始字符串的開頭和尾部不起作用。

4

解決方案不起作用的原因是因爲str.strip()僅從字符串的外部刪除字符,即字符串的最左端或最右端的字符。因此,在'foobar'的情況下,帶單字符參數的str.strip()只有在您想要刪除字符'f''r'時纔有效。

可能消除更多帶內的字符,但你也需要包括一個外部字符。

>>> 'foobar'.strip('of') 
'bar' 
>>> 'foobar'.strip('o') 
'foobar' 

下面介紹如何通過字符串連接生成器表達式來做到這一點:

def eliminate(s, bad_characters): 
    bc = set(bad_characters) 
    return ''.join(c for c in s if c not in bc) 
2

strip是不是這個任務,因爲它來自領導和字符串的結尾刪除字符,而不是您可以使用str.translate方法的正確選擇:

>>> s,l="foobar",["o","b"] 
>>> s.translate(None,''.join(l)) 
'far' 
0

試試這個,可能是費時using recursion

def eliminate(s, seq): 
    while seq: 
     return eliminate(s.replace(seq.pop(),""), seq) 
    return s 
>>>eliminate("foobar",["o","b"]) 
'far'