1. ホーム
  2. python

[解決済み] Pythonで2つのソートされたリストを結合する

2023-07-25 21:56:39

質問

オブジェクトの2つのリストがあります。それぞれのリストは、datetime型のオブジェクトのプロパティによってすでにソートされています。2 つのリストを 1 つのソートされたリストに結合したいと思います。最良の方法は、単にソートを行うことですか、それともPythonでこれを行うよりスマートな方法があるのでしょうか?

どのように解決するのですか?

人々はこれを複雑にしすぎているようです。2つのリストを結合し、ソートするだけです。

>>> l1 = [1, 3, 4, 7]
>>> l2 = [0, 2, 5, 6, 8, 9]
>>> l1.extend(l2)
>>> sorted(l1)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

...あるいはもっと短く(そして l1 ):

>>> sorted(l1 + l2)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

...簡単ですね! さらに、2つの組み込み関数しか使っていないので、リストが適度な大きさであると仮定すれば、ループでソート/マージするよりも速く実装できるはずです。さらに重要なのは、上記の方がはるかに少ないコードで、非常に読みやすいということです。

リストが大きい場合 (数十万以上でしょう)、別のカスタムソート方法を使用した方が早いかもしれませんが、最初に行うべき他の最適化がある可能性があります (たとえば、数百万個の datetime オブジェクトを保存しないなど)。

を使うことで timeit.Timer().repeat() (関数を1000000回繰り返す)を使って、ゆるくベンチマークをとってみたところ ghosebの ソリューション、そして sorted(l1+l2) の方が大幅に速いです。

merge_sorted_lists を取りました。

[9.7439379692077637, 9.8844599723815918, 9.552299976348877]

sorted(l1+l2) を取った。

[2.860386848449707, 2.7589840888977051, 2.7682540416717529]