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()使用できますが、ダッシュを 1 つ返すだけです。

正規表現の仕事のように見えます:

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

テスト時:

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

Python では文字列はimmutableであるため、文字列を変更してもコードは何の効果もありませんlist.removere.sub文字列をその場で変更するのではなく、置換された文字列を返すため、それを変数に割り当てる必要があります (または、この場合は単に返すだけです)。

于 2013-09-20T00:15:12.790 に答える
1

そのために正規表現を使用します。

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

このように正規表現を使用すると、識別して ^^ O(n) 時間に置き換えることができます。

于 2013-09-20T00:27:21.750 に答える
0

---それぞれを-に置き換え、それぞれ--を…に置き換えようとしているだけなら、 -Python に直接変換するのは簡単です。

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

(修正したい場合は、2 文字、3 文字、45 文字のいずれであっても、2 文字以上の文字列を単一の に置き換えます。それは正規表現の仕事です。しかし、それ以外の場合は、問題をより複雑にするだけです。理解できない「魔法のコード」だけを使いたくないのです — そして、ある時点で正規表現を学ぶことは間違いなく価値がありますが、この問題を解決するためにそれらを学ぶ必要はありません.)--

于 2013-09-20T01:25:50.797 に答える