Python のリストとタプルは、Python データ構造の 2 つのクラスです。リスト構造は動的であり、容易に変更できますが、タプル構造は静的で変更できません。これは、タプルは一般にリストよりも高速であることを意味します。リストは角括弧で示され、タプルは括弧で示されます。
Python のリストとタプルの違い
スノ | リスト | タプル |
|---|---|---|
| 1 | リスト は 変更可能な | タプル 不変である |
| 2 | 反復には時間がかかります | 反復の意味は比較的高速です |
| 3 | リストは、挿入や削除などの操作を実行するのに適しています。 | タプル データ型は要素へのアクセスに適しています。 |
| 4 | リストはより多くのメモリを消費します | タプルはリストに比べてメモリ消費量が少ない |
| 5 | リストにはいくつかの組み込みメソッドがあります | タプルには多くの組み込みメソッドがありません。 |
| 6 | 予期しない変更やエラーが発生する可能性が高くなります | タプルは変更されないため、エラーが発生しにくくなります。 |
Python リストと Python タプル
タプルが不変でリストが変更可能かどうかをテストする
ここではリストとタプルの可変性テストを比較します。
Python3 # Creating a List with # the use of Numbers # code to test that tuples are mutable List = [1, 2, 4, 4, 3, 3, 3, 6, 5] print('Original list ', List) List[3] = 77 print('Example to show mutability ', List)> 出力
Original list [1, 2, 4, 4, 3, 3, 3, 6, 5] Example to show mutability [1, 2, 4, 77, 3, 3, 3, 6, 5]>
ここで見ることができます タプル 変更することはできません。
Python3 # code to test that tuples are immutable tuple1 = (0, 1, 2, 3) tuple1[0] = 4 print(tuple1)>
出力:
なぜJavaでマーカーインターフェースを使うのか
Traceback (most recent call last): File 'e0eaddff843a8695575daec34506f126.py', line 3, in tuple1[0]=4 TypeError: 'tuple' object does not support item assignment>
Pythonではリストとタプルのどちらが優れていますか?
この答えをテストするために、Python タプルと Python リストに対していくつかの操作を実行してみましょう。これにより、Python のリストとタプルのどちらが優れているかがよりよくわかります。
タプルのメモリ効率が高いかどうかをテストする
タプルは単一のメモリ ブロックに格納されるため、新しいオブジェクト用の追加スペースは必要ありませんが、リストは 2 つのブロックに割り当てられます。最初の固定ブロックにはすべての要素が含まれます。 パイソン オブジェクト情報、2 つ目はデータの可変サイズのブロックです。
Python3 import sys a_list = [] a_tuple = () a_list = ['Geeks', 'For', 'Geeks'] a_tuple = ('Geeks', 'For', 'Geeks') print(sys.getsizeof(a_list)) print(sys.getsizeof(a_tuple))> 出力
96 80>
反復の意味がタプルで比較的高速かどうかをテストする
したがって、タプルは単一のメモリ ブロックに格納されるため、不変であるため新しいオブジェクトのための追加のスペースは必要ありません。一方、リストは 2 つのブロックに割り当てられます。最初の固定ブロックにはすべての要素が含まれます。 パイソン オブジェクト情報、もう 1 つはデータの可変サイズのブロックであり、これによりさらに高速化されます。
Python3 # code import sys, platform import time l=list(range(100000001)) t=tuple(range(100000001)) start = time.time_ns() for i in range(len(t)): a = t[i] end = time.time_ns() print('Total lookup time for Tuple: ', end - start) start = time.time_ns() for i in range(len(l)): a = l[i] end = time.time_ns() print('Total lookup time for LIST: ', end - start)> 出力
Total lookup time for Tuple: 7038208700 Total lookup time for LIST: 19646516700>
可変リストと不変タプル
で パイソン 、リストとタプルはどちらも、インデックス作成、スライス、連結などを含むさまざまな操作をサポートします。ただし、リストとタプルにはそれぞれ可変性と不変性があるため、使用できる操作にはいくつかの違いがあります。
Python のインデックス作成
リストとタプルの両方で、0 から始まるインデックスを使用して個々の要素にアクセスできます。
Python3 my_list = [1, 2, 3] my_tuple = (4, 5, 6) print(my_list[0]) # Output: 1 print(my_tuple[1]) # Output: 5>
出力
1 5>
パイソンのスライシング
リストとタプルの両方で、スライスを使用して要素のサブセットを抽出できます。
junit テストケースPython3
my_list = [1, 2, 3, 4, 5] my_tuple = (6, 7, 8, 9, 10) print(my_list[1:3]) # Output: [2, 3] print(my_tuple[:3]) # Output: (6, 7, 8)>
出力
[2, 3] (6, 7, 8)>
Python の連結
リストとタプルはどちらも + 演算子を使用して連結できます。
Python3 list1 = [1, 2, 3] list2 = [4, 5, 6] tuple1 = (7, 8, 9) tuple2 = (10, 11, 12) print(list1 + list2) # Output: [1, 2, 3, 4, 5, 6] print(tuple1 + tuple2) # Output: (7, 8, 9, 10, 11, 12)>
出力
[1, 2, 3, 4, 5, 6] (7, 8, 9, 10, 11, 12)>
注記 - ただし、変更可能であるため、リストに対してのみ使用できる操作がいくつかあります。
Python の追加
append() メソッドを使用して、リストに新しい要素を追加できます。
Python3 my_list = [1, 2, 3] my_list.append(4) print(my_list) # Output: [1, 2, 3, 4]>
出力
[1, 2, 3, 4]>
Python 拡張
extend() メソッドを使用して、リストを別のリストで拡張することもできます。
Javaの回文Python3
list1 = [1, 2, 3] list2 = [4, 5, 6] list1.extend(list2) print(list1) # Output: [1, 2, 3, 4, 5, 6]>
出力
[1, 2, 3, 4, 5, 6]>
Python の削除
リスト 要素は、remove() メソッドを使用して削除できます。
Python3 my_list = [1, 2, 3, 4] my_list.remove(2) print(my_list) # Output: [1, 3, 4]>
出力
[1, 3, 4]>
リストではなくタプルを使用する場合
で パイソン 、タプルとリストはどちらもデータのコレクションを保存するために使用されますが、いくつかの重要な違いがあります。リストの代わりにタプルを使用したい状況がいくつかあります。
不変データ – タプル は不変であるため、一度生成されると、その内容を変更することはできません。このため、タプルは、セットアップ設定、定数値、またはプログラムの実行中に同じままにしておく必要があるその他の情報など、変更すべきでない情報を保存するための適切なオプションになります。
パフォーマンス – タプル リストよりも軽量であり、不変であるため、生成、アクセス、反復処理が迅速に行われる可能性があります。タプルを使用すると、 リスト 定期的に保存、取得、使用する必要がある膨大なデータのコレクションがあり、そのデータを変更する必要がない場合。
データの整合性 - データの構造と内容の一貫性を確保することで、タプルを利用してデータの整合性を確保できます。呼び出し元が予想されるデータ量を確実に認識できるようにするため。たとえば、関数の場合 戻り値 設定された量の値を取得した場合、それらをリストではなくタプルとして返したい場合があります。