2015-04-05 35 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'