Pythonの基本的な知識の組み合わせ-リストとタプル

Pythonの基本的な知識の組み合わせ-リストとタプル

リストとタプル

リストとタプルはどちらも順序付けられたコレクションであり、任意のデータ型を配置するために使用できます

list1 = [1,2,'hello','world']# 列表中含有int类型和string类型的元素
print(list1)
[1,2,'hello','world']
tuple1 = ('json',2) # 元组中含有int类型和string类型的元素
ptrint(tuple1)
('json',2)

違い:
リストは動的で、長さは固定されておらず、要素はいつでも追加、削除、または変更できます。
タプルは静的で、長さは固定されており、要素を追加、削除、または変更することはできません。

list1 = [1,2,3,4]
list[3] = 4 # Python中从0开始索引,list[3]表示第四个元素

tuple1 = (1,2,3,4,5)
tuple1(3) = 4 # 类似于list
tuple1[3]=40 # 语句错误!tuple中的元素无法更改

タプルを変更する場合は、メモリの一部を再度開いて新しいタプルを作成することしかできません

tuple1 = (1,2,3,4)
new_tuple = tuple1 + (5,)# 创建新的元组并添加5到新元组的末尾

list1 = [1,2,3,4]
l.append(5) # 添加元素5到列表的末尾
print(list1)
[1,2,3,4,5]

単一の要素は、後ろから-1、-2、およびその他の操作で配置できます。

list1 = [1,2,3,4]
print(list1[-1])
4

tuple1 = (1,2,3,4)
print(tuple1[-1])
4

基本的な初期化とインデックス作成に加えて、すべてのリストとタプルはスライス操作をサポートします

list1 = [1,2,3,4]
list1[1:2]# 返回列表中索引从 2 到 3 的子列表
[2,3]

tuple1 = (1,2,3,4)
tuple1[2:3] # 返回元组中索引从 3 到 4 的子元组
(3,4)

タプルとリストは任意にネストすることもできます

list((1,2,3))
[1,2,3]

tuple([1,2,3])
(1,2,3)

リストとタプルには、多くの組み込み要素があります。

list1 = [1,2,3,4,5,6,7,8]
list1.count(3) # 统计元素出现的次数
1
list1.index(3)# 返回索引元素的位置
2
list1.sort()# 正向排序,可以通过revered=True来调整排序后的顺序
[1,2,3,4,5,6,7,8]

tuple1 = (3,2,3,7,8,1)
tuple1.count(3)# 统计元素出现的次数
2
tuple1.index(7)# 返回索引元素的位置
3
list(reversed(tuple1))# 倒转元组,返回倒转后的新元组
[1,8,7,3,2,3]
sorted(tuple1)# 对元组排序,返回排序后的新元组
[1,2,3,3,7,8]

タプルとリストのストレージの違い

タプルとリストの最も重要な違いは、リストは動的で変更可能であるのに対し、タプルは動的で不変であるということです。このような違いは、2つのストレージ方法の違いにつながります。

list1 = [1,2,3]
list1.__sizeof__()
64

tuple1 = (1,2,3)
tuple1.__sizeof__()
48

リストと比較すると、タプルが占めるスペースは16バイト少なくなっています。実際、リストは動的であるため、対応する要素を指すポインターを格納する必要があります(上記の例では、int型は8バイトを占めます)。また、リストは可変であるため、割り当てられた長さ(8バイト)の追加ストレージが必要であり、リストスペースの使用状況をリアルタイムで追跡できます。スペースが不足している場合は、追加のスペースが動的に割り当てられます。

list1 = []
list1.__sizeof__()# 空列表的存储空间为40个字节
40
list1.append(1)
list1.__sizeof__()# 当加入了元素1之后,列表为其分配了可以存储4个元素的空间(72-40)/8=4
72
list1.append(2)
list1.__sizeof__()# 由于之前分配的空间,所以加入元素后,列表的空间不变
72
list1.append(3)
list1.__sizeof__()# 由于之前分配的空间,所以加入元素后,列表的空间不变
72
list1.append(4)
list1.__sizeof__()# 由于之前分配的空间不够了,所以加入元素后,列表的空间又增加了4个元素空间,72+4x8=104
104

リストの追加と削除の時間計算量はO(1)です。

リストとタプルのパフォーマンス

違いとストレージタプルのリストを比較するとわかるように、タプルはリストの軽量以上であり、したがって全体として、タプルリストのパフォーマンスが原因です。

さらに、Pythonのバックグラウンドでは、一部のリソースキャッシュが静的データの描画に使用されます

以下では、Pythonでリストとタプルの初期化速度を確認できます。タプルの初期化速度はリストの5倍であることがわかります。

python3 -m timeit 'x=(1,2,3,4,5,6)'
20000000 loops, best of 5: 9.97 nsec per loop
python3 -m timeit 'x=[1,2,3,4,5,6]'
5000000 loops, best of 5: 50.1 nsec per loop

インデックス操作の場合、2つの間の速度差は非常に小さく、無視できます。

python3 -m timeit -s 'x=[1,2,3,4,5,6]' 'y=x[3]'
10000000 loops, best of 5: 22.2 nsec per loop
python3 -m timeit -s 'x=(1,2,3,4,5,6)' 'y=x[3]'
10000000 loops, best of 5: 21.9 nsec per loop

要素を追加、削除、または変更する場合は、リストの方が有利です。

リストとタプルのユースケース

1.保存されたデータと量が同じままである場合(通常、フロントエンドレンダリングに直接送信されるjsonデータと同様)、タプルを使用する方が確実に適切です。

2.保存されたデータまたは数量が可変であり、追加、削除、および変更する必要がある場合は、リストの方が適しています。





ブログ投稿のフォローアップ更新については、私の個人ブログをフォローしてください:Stardust Blog

おすすめ

転載: blog.csdn.net/u011130655/article/details/113018861