プレーヤー = [各 ID が一意である (id, float) タプルの長いリスト、浮動小数点数が高い順]
on_teams = [一意の ID のリスト、すべての on_teams ID もプレーヤー リストに含まれる]
picked = set(on_teams)
best_remaining = []
for best_player in players:
if best_player[0] not in picked:
best_remaining.append(best_player)
if len(best_remaining) == 5: break
「残りのベスト 5 人のプレイヤーを獲得する」などの単純なことを行うために 6 行のコードを使用する場合、もっとエレガントで Pythonic なソリューションはないのではないかと思います。これは単純な問題であることは間違いありませんが、それをコーディングするためのより良い方法はありますか?
更新: 私のコードは 100,000 回実行され、0.24 秒で実行されます。私が実行すると:
best_remaining = [(id, float) for id, float in players if id not in picked][:5]
コードは 4.61 秒 (100,000x) で実行されます。そのため、コードはより見栄えがよく、スキャンしやすくなりますが、リスト全体を作成してからスライスします。だから今、私の質問は少し異なります。速度を制約として、「残りのベスト 5 選手」の検索をコード化するより良い方法はありますか?
アップデート:
best_remaining = list(islice((p for p in players if p[0] not in picked), 5))
このコードは、私のコードよりもわずかに長く実行されます。少なくとも私にとっては、リスト内包表記の価値があります。そして何よりも、コードの習慣に取り組むのに適した場所を示してくれます。ありがとう