PYTHON MEBY

Pythonでリストを逆順にする(reverse, スライス[::-1])

この記事では、Pythonでリストを逆順にする2つの方法、`reverse()`メソッドとスライス`[::-1]`について説明します。それぞれの方法の特徴や使い分けについて解説します。

目次

reverse()メソッドによるリストの反転

リストの`reverse()`メソッドは、リストをインプレースで反転します。つまり、元のリスト自体が変更され、新しいリストは作成されません。

my_list = [1, 2, 3, 4, 5]
my_list.reverse()
print(my_list)  # 出力: [5, 4, 3, 2, 1]

元のリストが変更されることに注意してください。元のリストを保持したい場合は、リストのコピーを作成してから`reverse()`メソッドを適用してください。

my_list = [1, 2, 3, 4, 5]
reversed_list = my_list.copy()
reversed_list.reverse()
print(my_list)      # 出力: [1, 2, 3, 4, 5]
print(reversed_list) # 出力: [5, 4, 3, 2, 1]

スライス[::-1]によるリストの反転

スライス`[::-1]`は、リストの逆コピーを作成します。元のリストは変更されません。

my_list = [1, 2, 3, 4, 5]
reversed_list = my_list[::-1]
print(my_list)      # 出力: [1, 2, 3, 4, 5]
print(reversed_list) # 出力: [5, 4, 3, 2, 1]

この方法は、元のリストを保持しながら逆順のリストを作成したい場合に便利です。

パフォーマンス比較

一般的に、`reverse()`メソッドは`[::-1]`よりも高速です。これは、`reverse()`メソッドがインプレースで操作を行うためです。しかし、リストが非常に大きい場合でない限り、その差はほとんど無視できるでしょう。

import timeit

my_list = list(range(10000))

time_reverse = timeit.timeit(lambda: my_list.copy().reverse(), number=1000)
time_slice = timeit.timeit(lambda: my_list[::-1], number=1000)

print(f"reverse()メソッド: {time_reverse:.4f}秒")
print(f"スライス[::-1]: {time_slice:.4f}秒")

このコードを実行すると、それぞれの方法の実行時間を比較できます。結果は環境によって異なりますが、`reverse()`メソッドの方がわずかに速いことが分かるでしょう。

どちらの方法を使うべきか

どちらの方法もリストを逆順にすることができますが、状況に応じて使い分けることが重要です。 * 元のリストを変更しても問題ない場合、またはパフォーマンスを重視する場合は`reverse()`メソッドを使用します。 * 元のリストを保持したまま逆順のリストを作成したい場合は、スライス`[::-1]`を使用します。

関連記事