从字符串Python中删除序列中的项目

时间:2015-04-05 22:50:23

标签: python string function strip

好的,所以我试图创建一个函数,它将获取一个字符串和一系列项目(以列表,元组或字符串的形式)并从字符串中删除该列表中的所有项目

到目前为止,我的尝试看起来像这样:

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中的所有项目?

4 个答案:

答案 0 :(得分:4)

您的解决方案不起作用的原因是因为str.strip()仅从字符串的外部删除字符,即字符串最左侧或最右侧的字符。因此,对于'foobar',只有一个字符参数的str.strip()才能删除字符'f''r'

可以使用strip消除更多的内部字符,但你也需要包含一个外部字符。

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

答案 1 :(得分:2)

strip不是此任务的正确选择,因为它会从字符串的前导和尾随中删除字符,而是可以使用str.translate方法:

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

答案 2 :(得分:1)

尝试将坏字符替换为空字符串。

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

strip()在尝试删除原始字符串的开头和尾部时无效。

答案 3 :(得分:0)

试试这个,可能会耗时using recursion

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