[開発ログ]翌日-Pythonでこちらを探索
3884 ワード
今日やったこと済州及び島山区を区切る構想 図書山岳地帯はどのように区分します
一般的に宅配便と呼ばれる場合、図書の山間部では値上げと書かれています.しかし、これをどのように区別するか知りたいです.apiはありますか?
実際にapiは提供されていません.図書の山間の基準には規定の基準がないからだ.そのため、ある宅配会社が使用する図書の山間標準表で区別することにした.(どうせ宅配便で送ったんだから)
図書山間dbには、郵便番号、住所、済州島(チェジュド)、図書山間の有無のコラムがある.
私たち
Pikifarmのアドレス入力は、以下の郵便番号apiを使用します.(名前から郵便番号apiですが、これはわかりません)ユーザーが住所を入力して選択すると、郵便番号を含む各種データが渡され、これらの郵便番号を図書山間dbと照合して正しいかどうかを判断します.
最終的にこれはどのようにコードで表されるかの問題です.
論理は理論的には簡潔だが、それをコードに変換するには、いくつかの悩みがある.
図書山間dbはcsv形式で格納され,zipcodeはパラメータとして図書山間dbを出力できると仮定する.二つの方法が考えられる各関数の呼び出しに使用 csv zipcodeのみ抽出してコードに格納するlist 1番は書類管理に向いていると思いますが、2番は演技面で有利だと思い始めました.
だから最終的に2番を選んだのは、以下の理由からです.島山間dbは新しい山や島がない限り変わらない. 関数を呼び出すたびに使う きれいにするために、、、
図書山間dbには約8000個のrowがある.しかしZipcodeは重複することが多い.これにより、重複除外後、約1300行削減される.
リストに格納するのに十分だと思いますが、問題はどのように簡潔に表示するかです.
1300行のリストを関数論理とともに入れると、可読性が損なわれる可能性があります.
可能性があります.
さらに言えば、
実際、1300個のデータを検索したとき、O(n)O(n)O(n)とO(logn)O(logn)O(logn)は演技に大きな違いはないと思います.
ただし、多くのリクエストがある可能性があるため、すべての面で最適化する必要があります.
そこで、
Pythonのバイナリプローブモジュール、
したがって、上記のzipcode確認関数は、次のように変更できます.
TILpythonバイナリ探索対応モジュールあり
一般的に宅配便と呼ばれる場合、図書の山間部では値上げと書かれています.しかし、これをどのように区別するか知りたいです.apiはありますか?
実際にapiは提供されていません.図書の山間の基準には規定の基準がないからだ.そのため、ある宅配会社が使用する図書の山間標準表で区別することにした.(どうせ宅配便で送ったんだから)
図書山間dbには、郵便番号、住所、済州島(チェジュド)、図書山間の有無のコラムがある.
私たち
address
型番に郵便番号フィールドがないのは、道理で...Pikifarmのアドレス入力は、以下の郵便番号apiを使用します.(名前から郵便番号apiですが、これはわかりません)ユーザーが住所を入力して選択すると、郵便番号を含む各種データが渡され、これらの郵便番号を図書山間dbと照合して正しいかどうかを判断します.
最終的にこれはどのようにコードで表されるかの問題です.
論理は理論的には簡潔だが、それをコードに変換するには、いくつかの悩みがある.
図書山間dbはcsv形式で格納され,zipcodeはパラメータとして図書山間dbを出力できると仮定する.二つの方法が考えられる
pandas
csvの読み出しだから最終的に2番を選んだのは、以下の理由からです.
pandas
読み出しのオーバーヘッドが大きい図書山間dbには約8000個のrowがある.しかしZipcodeは重複することが多い.これにより、重複除外後、約1300行削減される.
リストに格納するのに十分だと思いますが、問題はどのように簡潔に表示するかです.
1300行のリストを関数論理とともに入れると、可読性が損なわれる可能性があります.
import
ゲートは変数にしか使えないのですか?可能性があります.
#zipcode.py
ZIPCODE_LIST = [
# some zipcodes that is mountain, island, jeju, and so on...
]
zipcodeリストのみのファイルを宣言します.from zipcode import ZIPCODE_LIST
def check_address_by_zipcode(request, zipcode):
if zipcode in ZIPCODE_LIST:
# some logics that check argument zipcode is in the ZIPCODE_LIST
これを関数ロジックから読み込めばいいです.さらに言えば、
実際、1300個のデータを検索したとき、O(n)O(n)O(n)とO(logn)O(logn)O(logn)は演技に大きな違いはないと思います.
ただし、多くのリクエストがある可能性があるため、すべての面で最適化する必要があります.
そこで、
ZIPCODE_LIST
でバイナリsearchを使って検索することにしましたzipcode
、もちろん直接実現することもできますが、Pythonは何でもあります.モジュール名bisect
bisectPythonのバイナリプローブモジュール、
bisect_left()
・bisect_right()
・bisect()
・などがあります.bisect_left(arr, x)
ソートされたリストarrにxを挿入したときに入るインデックスを左数から返す.したがって、上記のzipcode確認関数は、次のように変更できます.
from zipcode import ZIPCODE_LIST
from bisect import bisect_left
def check_address_by_zipcode(request, zipcode):
idx = bisect_left(ZIPCODE_LIST, zipcode)
return True if ZIPCODE_LIST[idx] == zipcode else False
zipcode
加ZIPCODE_LIST
に含まれる場合、bisect_left()
の結果により戻されるidx
ローストテーブルに近い値はzipcode
(図書山間dbの郵便番号は0で始まるので整数処理も問題ありません)TIL
bisect
Reference
この問題について([開発ログ]翌日-Pythonでこちらを探索), 我々は、より多くの情報をここで見つけました https://velog.io/@grefer/개발일지-2일차-テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol