私はPython 3の学習のためにHackerrankでいくつかの練習をしています。Pythonソート辞書は値によって不安定になることがありますか? (Hackerrankで)
タスクMost Commonには、英小文字のみを含む文字列が与えられ、その文字列の中で最も一般的な文字の上位3文字を見つける必要があります。
私はいくつかの質問に答えました。この問題の
私のソリューションは以下の通りです:私はローカル環境でこのコードをテストする場合
#!/bin/python3
import sys
if __name__ == "__main__":
s = input().strip()
ch_dict = {}
for ch in s:
if ch in ch_dict : ch_dict[ch] +=1
else: ch_dict[ch] = 1
result = sorted(ch_dict.items(),key=lambda d:d[1],reverse=True)
for i in result:
if i[1] != 1:
print(" ".join(map(str,i)))
、それは働きます!
オンラインテストでは、がになる可能性があります。この入力の
:
b 3
a 2
c 2
とも得ることができます:
aabbbccde
私はこのような正しい答えを得る時々、多くの時間を提出
b 3
c 2
a 2
それ並べ替えが不安定になる可能性がありますか?または、私のコードの問題は何ですか? ORは何かHackerrank環境で間違っていますか?
出力を保証するにはどうすればよいですか?
辞書を*順不同*で、あなただけの値でソートされています。だから*等しい値*を得るとき、その順序は入力順と同じです。実装は定義されており、任意に見えることがあります。 [辞書と順序の順序が恣意的なのはなぜですか?](// stackoverflow.com/a/15479974) –
2番目の答えは最初のものと同じで、両方の値が値でソートされています。安定していると不安定なものは、前もって守るべきことがないのでここでは適用できません。 – Goyo
@Goyo:まあ、ありますが、その順序は、ランダムなハッシュシードのためにインタプリタが呼び出されるたびに変更されます。 –