从字符串 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
但是,出于某种原因,当我尝试这个或这个的变体时,它只是 returns 原始字符串或仅删除 bad_characters 中第一项的版本。
>>> eliminate("foobar",["o","b"])
'foobar'
有没有办法从给定的字符串中删除 bad_characters 中的所有项目?
您的解决方案不起作用的原因是 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)
尝试将错误字符替换为空字符串。
def eliminate(s, bad_characters):
for item in bad_characters:
s = s.replace(item, '')
return s
strip()
不起作用,因为它试图仅删除原始字符串的开头和结尾部分。
strip
不是此任务的正确选择,因为它会删除字符串前导和尾随的字符,您可以使用 str.translate 方法:
>>> s,l="foobar",["o","b"]
>>> s.translate(None,''.join(l))
'far'
试试这个,可能会很费时间using recursion
def eliminate(s, seq):
while seq:
return eliminate(s.replace(seq.pop(),""), seq)
return s
>>>eliminate("foobar",["o","b"])
'far'
好的,所以我正在尝试制作一个函数,它将接受一个字符串和一系列项目(以列表、元组或字符串的形式)并从字符串中删除该列表中的所有项目.
到目前为止我的尝试是这样的:
def eliminate(s, bad_characters):
for item in bad_characters:
s = s.strip(item)
return s
但是,出于某种原因,当我尝试这个或这个的变体时,它只是 returns 原始字符串或仅删除 bad_characters 中第一项的版本。
>>> eliminate("foobar",["o","b"])
'foobar'
有没有办法从给定的字符串中删除 bad_characters 中的所有项目?
您的解决方案不起作用的原因是 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)
尝试将错误字符替换为空字符串。
def eliminate(s, bad_characters):
for item in bad_characters:
s = s.replace(item, '')
return s
strip()
不起作用,因为它试图仅删除原始字符串的开头和结尾部分。
strip
不是此任务的正确选择,因为它会删除字符串前导和尾随的字符,您可以使用 str.translate 方法:
>>> s,l="foobar",["o","b"]
>>> s.translate(None,''.join(l))
'far'
试试这个,可能会很费时间using recursion
def eliminate(s, seq):
while seq:
return eliminate(s.replace(seq.pop(),""), seq)
return s
>>>eliminate("foobar",["o","b"])
'far'