異なる入力に対して同じことを返すことができる効率的な "switch"文を書くには? Pythonで
単純なスイッチは、次のように辞書を使用して実装することができます。別名を持つPython switch文
def switch(s):
case = {'phone': '123 456 789', 'website': 'www.example.com'}
return case[s]
この1一定のアクセス時間を持っている、しかし私は、すなわちswitch('website')
は値を複製することなく、switch('site')
などと同じものを返しますエイリアスを使用する場合、すなわち使用しない
case = {'website': 'www.example.com, 'site': 'www.example.com}
使用することができますどのような は、次のとおりです。
def switch(s):
case = {('telephone', 'number', 'phone'): '123 456 789',
('website', 'site'): 'www.example.com'}
for key, value in case.items():
if s in key:
return value
しかし、このアプローチは、線形アクセスよりも悪化しています時間。
それは
def switch(s):
case = ['123 456 789', 'www.example.com']
aliases = {'telephone': 0, 'number': 0, 'phone': 0,
'website': 1, 'site': 1}
return case[aliases[s]]
を使用することにより、一定にすることができるが、その後、私はソートの値を複製だと場合には、私はすべての答えを削除することを決定 、私はaliases
を編集する必要が 'および/またはcase
の戻り
は番目です(私はもはや'123 456 789'
を返すようにしたい場合、私はcase
からそれを削除し、aliases['website']
とaliases['site']
リターン0
ORはcase
の第一のセルにダミーの値を残したり、case
辞書を作るようにaliases
を変更する必要がない)の値そのようなステートメントを書く良い方法はありますか?
私は第2の例が非線形時間を有するとは思わない。それはあなたのスイッチのプールはどれくらいの大きさですか? – Uriel
2番目の例では、直線的にすべてのキーを調べ、各キー内で文字列がこのキーの内側にあるかどうかを確認します。これも効率的ではありません。 – Szymon
どのようにそう? 2つの最悪の場合と最良の場合を取ることができます:すべてのタプルキーの長さは1です。次に、O(n)を取得します。単一のタプルキーがあります。 O(log(n))である。 – Uriel