[英]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.