0
def checkio(line):
   list.remove(max("---"))
   list.remove(min("--"))
   return line

if __name__ == '__main__':
    assert checkio('I---like--python') == "I-like-python", 'Example'

$ 我正在尝试从我喜欢 python 的字符串中删除“---”和“--”,它似乎正在工作。有什么帮助吗?

4

3 回答 3

3

我想你不想list.remove()在这里。这从列表中删除了一个项目。事实上,你根本没有清单。

max()可以使用,但它所做的只是返回一个破折号。

看起来像正则表达式的工作:

import re
def checkio(line):
    reutrn re.sub(r'(-)+', r'\1', line)

测试时:

>>> checkio('I---like--python') == "I-like-python"
True

请记住,在 python 中,字符串是不可变list.remove的,因此如果修改了字符串,您的代码将不起作用。re.sub不会就地修改字符串,而是返回被替换的字符串,所以我们必须将它分配给一个变量(或者,在这种情况下,只是返回它)。

于 2013-09-20T00:15:12.790 回答
1

I would use regular expressions for that:

>>> import re
>>> source = "String-----with-hyphens-nohypenshere--morehyphenshere-----------"
>>> string = re.sub(r'-+', '-', source)
>>> string
'String-with-hyphens-nohypenshere-morehyphenshere-'

Using regex in this way you can identify and replace with ^^ O(n) time.

于 2013-09-20T00:27:21.750 回答
0

如果您只是想用 替换 each ----并将 each 替换---... ,那么直接翻译成 Python 很容易:

def checkio(line):
    return line.replace('---', '-').replace('--', '-')

(如果你想用单个替换任何两个或多个字符的字符串,无论是 2、3 还是 45,那么它就是正则表达式的工作。但否则,你只会让问题变得更复杂。你不要只想使用你不理解的“魔法代码”——虽然在某些时候学习正则表达式绝对值得,但你不必学习它们来解决这个问题。)--

于 2013-09-20T01:25:50.797 回答