interval
数日前の最も古い日付のインデックスを選択する必要がありますdate1
( index を使用i1
)。ソートされたリストdates
があり、これは私がやろうとしていることのスニペットです:
for i1 in mylist:
date1 = dates[i1]
i0 = sum(1 for d in dates if date1 - d > timedelta(days = interval))
# do some other stuff with this
私が見つけた行はi0
、このループのボトルネックのようです。これを変更するとi0 = max(0, i1 - 30)
(欠落している日付は単に無視されます)、約 100 倍速く動作するからです。
それをスピードアップする方法はありますか?リストがソートされているという事実を利用して、すべての比較を避ける方法が必要だと思います。
PS: 私の最初の試みは次のとおりです。
i0 = len([d for d in dates if date1 - d > timedelta(days = interval)])
これはさらに遅いです。