タプルの 1 つのリストを別のタプルのリストから除外する 2 つのアプローチの速度の違いに驚きました。だから、なぜだろうと思っていました。
値でソートされた (int, float) の形式の 1,500 個のタプルのリストがありfloat
ます。(追加注: タプル リスト内の各 int 値は個別です。) サブリストを除外する最速の方法を見つけたかったのです。まず、除外するサブリストを作成しました。
exclude_list = [v for i,v in enumerate(tuple_list) if (i % 3) == 0]
exclude_list
次に、から削除する 2 つの異なるアプローチの時間を計りましたtuple_list
(ただし、これらは最終的に落ち着いた 2 つのアプローチではありません)。
remainder_list = [v for v in tuple_list if v not in exclude_list]
と、
remainder_set = set(tuple_list) - set(exclude_list)
remainder_list = sorted(remainder_set, key=itemgetter(1)) #edited to chance key to 1 from 0
時間の差は非常に大きく、最初のアプローチでは 14.7235 秒 (500 回)、2 回目のアプローチでは 0.3426 (500 回) でした。最初のアプローチでは、メイン リスト内の各アイテムの sub_list を検索する必要があるため、これら 2 つのアプローチの時間がこれほど異なる理由は理解できます。そこで、検索/除外するためのより良い方法を思いつきました:
exclude_dict = dict(exclude_list)
remainder_list = [v for v in tuple_list if v[0] not in exclude_dict]
リスト アイテムを除外するこのバージョンが、最初のバージョンよりもはるかに高速になるとは思いませんでした。最初のアプローチよりも高速だっただけでなく、2 番目のアプローチよりも高速でした。時間は 0.11177 (500 倍) です。これが私のセット差/リゾートアプローチよりも速いのはなぜですか?