【python】list tuple dict setの使い方と説明


List tuple dict setの4種類の比較
名前
シンボルの生成
特長
リストリストリスト
[,,,]
リストリストは、エレメントをいつでも追加および削除できる秩序化された集合です.
メタグループtuple
(,,,)
tupleはlistと非常に似ていますが、tupleは初期化すると修正できません.
辞書dict
{:,:,:}
全称dictionary、他の言語ではmapとも呼ばれ、キー値(key-value)を使用して格納され、検索速度が非常に速い
集合set
([,,,])
setはdictと同様にkeyのセットでもあるがvalueは格納されない.keyは繰り返すことができないのでsetでは繰り返すkeyはありません
List
Listは秩序ある集合であり、いつでも要素を削除して追加することができ、基本的な操作は以下の通りである.
#    list,   py
>>>py=['list','tuple','dict','set']
>>>py
['list','tuple', 'dict', 'set']
#  list      
>>>len(py)
4
#     list         ,    0   ,         len(py)-1
>>>py[0]
'list'
>>>py[len(py)-1]
'set'
#      list      ,          -1
>>>py[-1]
'set'
# list      
>>>py.append('last')
>>>py
['list','tuple', 'dict', 'set', 'last']
#         
>>>py=['list', 'tuple', 'dict', 'set', 'last']
>>>py.insert(0,'first')
>>>py
['first','list', 'tuple', 'dict', 'set', 'last']
#        
>>>py.pop()
'last'
>>>py
['first','list', 'tuple', 'dict', 'set']
#         
>>>py.pop(0)
'first'
>>>py
['list','tuple', 'dict', 'set']
#               
>>>py[0]='1'
>>>py
['1','tuple', 'dict', 'set']
#  list          list
>>>pys=['python',py,'my']
>>>pys
['python',['1', 'tuple', 'dict', 'set'], 'my']
#     3
>>>len(pys)
3
#pys          ,  pys py      
>>>pys[1][0]
'1'
# list   0
>>>py0=[]
>>>py0
[]
>>>len(py0)
0

Tuple
tupleはlistと非常に似ていますが、tupleは初期化すると修正できません.append()、insert()のような方法はありません.他の要素を取得する方法はlistと同じです.tupleは可変ではないので、コードはもっと安全です.できればlistの代わりにtupleを使えばできるだけtupleを使います.tupleを定義するときは、定義するときにtupleの要素を決定する必要があります.
#  tuple
>>>tp=('list','tuple','dict','set')
>>>tp
('list','tuple', 'dict', 'set')
#  tuple       list  
>>>tp[2]
'dict'
>>>tp[-1]
'set'
#         tuple      ,(1,)      (1)
>>>tp=(1,)
>>>tp
(1,)
>>>tp=(2)
>>>tp
2
#tuple   list
>>>tp=(1,py,3)
>>>tp
(1, ['1','tuple', 'dict', 'set'], 3)
>>>tp[1][1]=2
>>>tp
(1, ['1',2, 'dict', 'set'], 3)

表面的にはtupleの要素は確かに変わったが、実はtupleの要素ではなくlistの要素になった.tupleが最初に指すリストは他のリストに変更されていないので、tupleのいわゆる「不変」とは、tupleの各要素が、永遠に不変を指すことを意味します.1つのリストを指すと、他のオブジェクトを指すように変更することはできませんが、このリスト自体は可変です.
Dict
dictはdictionaryと呼ばれ、他の言語ではmapとも呼ばれ、キー値(key-value)を使用して格納され、非常に速い検索速度を有する.dictの実現原理は辞書を引くのと同じで、まず辞書のインデックス表(例えば部首表)でこの字の対応するページ番号を調べて、それから直接このページにめくって、この字を見つけて、どの字を探しても、この検索速度はとても速くて、辞書の大きさの増加に伴って遅くなることはありません.このkey-value格納方式は、入れる際にkeyに基づいてvalueの格納位置を算出しなければならず、取る際にkeyに基づいて直接valueを手に入れることができる.
dict内部に格納される順序はkeyが入れる順序とは関係ありません.
リストと比較すると、dictには以下のいくつかの特徴があります.
1.検索と挿入の速度は極めて速く、keyの増加に伴って増加しない.
2.大量のメモリを必要とし、メモリの浪費が多い.
リストは逆です.
1.検索と挿入の時間は要素の増加に伴って増加する.
2.占有スペースが小さく、メモリの浪費が少ない.
だからdictは空間で時間を取り替える方法です.
dictは高速検索が必要な多くの場所で使用でき、Pythonコードにはほとんど存在しない.dictを正しく使用することは非常に重要であり、第一に、dictのkeyが可変オブジェクトでなければならないことを覚えておく必要がある.
これはdictがkeyに基づいてvalueの格納位置を計算し,同じkeyを計算するたびに結果が異なるとdict内部が完全に混乱するためである.このkeyによって位置を計算するアルゴリズムをハッシュアルゴリズム(Hash)と呼ぶ.
hashの正確性を保証するにはkeyの対象としては変えられない.Pythonでは文字列や整数などが可変であるため,安心してkeyとすることができる.リストが可変であるとkeyとしてはならない.
#    dict,dict        key            
dt={'a':1,'b':2,'c':3,'d':4}
>>>dt
{'d':4, 'c': 3, 'b': 2, 'a': 1}
#  key    value
>>>dt['c']
3
#  key   value
>>>dt['e']=5
>>>dt
{'e':5, 'd': 4, 'c': 3, 'b': 2, 'a': 1}
#  key    value  
#    key      value,  ,     key  value,            
>>>dt['e']=10
>>>dt
{'e':10, 'd': 4, 'c': 3, 'b': 2, 'a': 1}
#  key   ,dict    
>>>dt['f]
  
SyntaxError:EOL while scanning string literal
>>>dt['f']
Traceback(most recent call last):
  File "<pyshell#1093>", line1, in <module>
    dt['f']
KeyError:'f'
#  in  key   dict 
>>>'b' in dt
True
#  get     key   value           
>>>dt.get('f',-1)
-1
>>>dt.get('a',-1)
1
#  pop(key)     key     value
>>>dt.pop('a')
1
>>>dt
{'e': 10, 'd': 4, 'c': 3,'b': 2}

Dict
setはdictと同様にkeyのセットでもあるがvalueは格納されない.keyは繰り返すことができないのでsetでは繰り返すkeyはありません.setとdictの唯一の違いは、対応するvalueが格納されていないことだけですが、setの原理はdictと同じなので、同じように可変オブジェクトを入れることはできません.2つの可変オブジェクトが等しいかどうかを判断できないため、set内部に「重複要素がない」ことを保証することはできません.
#    set
st=set([1,2,3,4])
>>>st
{1,2, 3, 4}
#set          
>>>st=set([2,4,3,4,5,6,7,8,4,2,2,1,4,5,6])
>>>st
{1,2, 3, 4, 5, 6, 7, 8}
#  add(key) set  key 
>>>st.add(0)
>>>st
{0,1, 2, 3, 4, 5, 6, 7, 8}
#  remove(key) set  key 
>>>st.remove(0)
>>>st
{1,2, 3, 4, 5, 6, 7, 8}