簡體   English   中英

從字符串Python中刪除序列中的項目

[英]Remove items in a sequence from a string 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中的所有項目?

您的解決方案不起作用的原因是因為str.strip()僅從字符串的外部刪除字符,即,字符串最左端或最右端的字符。 因此,在'foobar'的情況下, str.strip()具有單個字符參數的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)

strip不是此任務的正確選擇,因為它會刪除字符串開頭和結尾的字符,而可以使用str.translate方法:

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

嘗試將不良字符替換為空字符串。

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

strip()不起作用,因為它僅嘗試刪除原始字符串的開始和結尾部分。

嘗試一下, using recursion可能很耗時

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM