Pythonにおけるlist,tuple,dict,setの違いと使い方


Python言語は簡潔明瞭で,少ないコードで同様の機能を実現できる.このうちPythonの4つの内蔵データ型はlist,tuple,dict,setである.ここでは彼らを簡明にまとめた.
 
List
Pythonのリストの要素は中括弧[]で表され、リストを定義することができます.
L = [12, 'China', 19.998]

要素を必要としないタイプが同じであることがわかります.もちろん、空のリストを定義することもできます.
L = []

 
Pythonのリストは秩序があるので、リストにアクセスするにはシーケンス番号でアクセスするのが明らかです.配列の下付き文字のように、下付き文字は0から始まります.
>>> print L[0]
12

決して境界を越えないでください.そうしないと、間違いを報告します.
>>> print L[3]
Traceback (most recent call last):
  File "", line 1, in 
IndexError: list index out of range

Listは逆順でアクセスすることもでき、「最後からx番目」のような下付き文字でシーケンス番号を表し、例えば-1という下付き文字は最後からx番目の要素を表す.
>>> L = [12, 'China', 19.998]
>>> print L[-1]
19.998

-4なら明らかに限界だ
>>> print L[-4]

Traceback (most recent call last):
  File "", line 1, in 
    print L[-4]
IndexError: list index out of range
>>> 

 
Listは内蔵のappend()メソッドで末尾に追加し、insert()メソッドで指定位置に追加します(下付きは0から):
>>> L = [12, 'China', 19.998]
>>> L.append('Jack')
>>> print L
[12, 'China', 19.998, 'Jack']
>>> L.insert(1, 3.14)
>>> print L
[12, 3.14, 'China', 19.998, 'Jack']
>>> 

pop()で最後の末尾要素を削除するか、パラメータを指定して指定した場所を削除できます.
>>> L.pop()
'Jack'
>>> print L
[12, 3.14, 'China', 19.998]
>>> L.pop(0)
12
>>> print L
[3.14, 'China', 19.998]

コピー置換は、下付き文字で行うこともできます
>>> L[1] = 'America'
>>> print L
[3.14, 'America', 19.998]

 
Tuple
Tupleは「不変」のリストと見なすことができ、アクセスも下付きで括弧()で表す.
>>> t = (3.14, 'China', 'Jason')
>>> print t
(3.14, 'China', 'Jason')

ただし、置換は再割り当てできません.
>>> t[1] = 'America'

Traceback (most recent call last):
  File "", line 1, in 
    t[1] = 'America'
TypeError: 'tuple' object does not support item assignment

popやinsert、appendメソッドもありません.
空の要素のtupleを作成できます.
t = ()

または、単一要素tuple(カンマを付けて整形の曖昧さを防止し、宣言するなど):
t = (3.14,)

 
ではtupleというタイプはいったい何の役に立つのでしょうか.1つの関数に複数の戻り値を返したい場合は、tupleに複数の値が含まれており、可変ではありません(javaのfinalのように).もちろん、tupleも可変です.たとえば、
>>> t = (3.14, 'China', 'Jason', ['A', 'B'])
>>> print t
(3.14, 'China', 'Jason', ['A', 'B'])
>>> L = t[3]
>>> L[0] = 122
>>> L[1] = 233
>>> print t
(3.14, 'China', 'Jason', [122, 233])

これは、Tupleのいわゆる可変とは、指向する位置が可変でないことを意味するためであり、本例では4番目の要素は基本タイプではなく、1つのListタイプであるため、tが指向するそのListの位置は変わらないが、List自体の内容は変化可能であり、List自体のメモリへの割り当てが連続していないためである.
 
Dict
DictはPythonの中で非常に重要なデータ型で、その字面の意味のように、それは生きている辞書で、実はKey-Valueキーの値のペアで、HashMapに似ていて、括弧{}でC言語を定義する構造体のように定義することができます:
>>> d = {
    'Adam': 95,
    'Lisa': 85,
    'Bart': 59,
    'Paul': 75
}
>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Bart': 59}

印刷された結果はすべてKey:Valueの形式で、len関数でその長さを計算することができます(List、tupleでもいいです):
>>> len(d)
4

 
dictの要素をキー値ペアで直接追加できます.
>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Bart': 59}
>>> d['Jone'] = 99
>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Jone': 99, 'Bart': 59}

 
ListとTupleは下付きでコンテンツにアクセスし、DictはKeyでアクセスします:(文字列、整数、浮動小数点型、メタグループtupleはdictのkeyとして使用できます)
>>> print d['Adam']
95

キーが存在しない場合は、エラーが発生します.
>>> print d['Jack']

Traceback (most recent call last):
  File "", line 1, in 
    print d['Jack']
KeyError: 'Jack'

アクセスする前にキーが存在するかどうかを確認したほうがいいです.
>>> if 'Adam' in d : print 'exist key'

exist key

または保険のgetメソッドを直接使用します.
>>> print d.get('Adam')
95
>>> print d.get('Jason')
None

 
1つのdictを遍歴すると、実際にはそのすべてのKeyの集合を遍歴し、このKeyで対応するValueを得る.
>>> for key in d : print key, ':', d.get(key)

Lisa : 85
Paul : 75
Adam : 95
Bart : 59

 
Dictにはいくつかの特徴があります.
  • は検索速度が速い.10個でも10万個でも速度は同じですが、コストは消費メモリが大きいです.Listとは逆に,メモリ消費量は小さいが,検索速度は遅い.これは配列とチェーンテーブルの違いのようなもので、配列はどれだけの空間を開くか分からないので、大きな空間を開くことが多いが、直接下付きで探すのが速い.チェーンテーブルの占有スペースは小さいが、検索時に順番に巡回しなければならないため、速度が遅い
  • である.
  • は順番がありません.Dictは無秩序であり、Listは秩序化集合であるため、秩序化集合
  • をDictで記憶することはできない.
  • Keyは可変であり、Valueは可変である.1つのキー値ペアにdictを加えると、対応するkeyは変更できませんが、Valueは変更できます.したがって,ListはDictのKeyとしてはならないが,Value:
  • としてはよい.
    >>> print d
    {'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Jone': 99, 'Bart': 59}
    >>> d['NewList'] = [12, 23, 'Jack']
    >>> print d
    {'Bart': 59, 'NewList': [12, 23, 'Jack'], 'Adam': 95, 'Jone': 99, 'Lisa': 85, 'Paul': 75}
  • Keyは繰り返してはいけません.(次の例では「Jone」:0を追加しましたが、実際にはすでに「Jone」というKeyがあったので、元のvalueを変更しただけです)
  • >>> print d
    {'Bart': 59, 'NewList': [12, 23, 'Jack'], 'Adam': 95, 'Jone': 99, 'Lisa': 85, 'Paul': 75}
    >>> d['Jone'] = 0
    >>> print d
    {'Bart': 59, 'NewList': [12, 23, 'Jack'], 'Adam': 95, 'Jone': 0, 'Lisa': 85, 'Paul': 75}

     
    Dictのマージ、2つのDictを1つにマージする方法は、dict関数を使用します.
    >>> d1 = {'mike':12, 'jack':19}
    >>> d2 = {'jone':22, 'ivy':17}
    >>> dMerge = dict(d1.items() + d2.items())
    >>> print dMerge
    {'mike': 12, 'jack': 19, 'jone': 22, 'ivy': 17}

    または
    >>> dMerge2 = dict(d1, **d2)
    >>> print dMerge2
    {'mike': 12, 'jack': 19, 'jone': 22, 'ivy': 17}

    方法2は方法1よりずっと速く、方法2は:
    >>> dMerge3 = dict(d1)
    >>> dMerge3.update(d2)
    >>> print dMerge
    {'mike': 12, 'jack': 19, 'jone': 22, 'ivy': 17}

     
    set
     
    setはDictのkeyを抽出したようにリストに似ていますが、コンテンツを繰り返すことはできません.set()メソッドを呼び出して作成します.
    >>> s = set(['A', 'B', 'C'])

    dictが無秩序であるようにsetも無秩序であり,重複する要素も含まない.
     
    setにアクセスする意味は、要素がこのセットに含まれているかどうかを確認することだけです.
    >>> print 'A' in s
    True
    >>> print 'D' in s
    False

    大文字と小文字は敏感です.
    forによっても遍歴します.
    s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])
    #tuple
    for x in s:
        print x[0],':',x[1]
    
    >>>
    Lisa : 85
    Adam : 95
    Bart : 59

     
    addとremoveで要素を追加、削除し(重複しないように)、要素を追加する場合はsetのadd()メソッドを使用します.
    >>> s = set([1, 2, 3])
    >>> s.add(4)
    >>> print s
    set([1, 2, 3, 4])

    追加した要素がsetにすでに存在する場合、add()はエラーを報告しませんが、追加されません.
    >>> s = set([1, 2, 3])
    >>> s.add(3)
    >>> print s
    set([1, 2, 3])

    setの要素を削除する場合は、setのremove()メソッドを使用します.
    >>> s = set([1, 2, 3, 4])
    >>> s.remove(4)
    >>> print s
    set([1, 2, 3])

    削除した要素がsetに存在しない場合、remove()はエラーを報告します.
    >>> s = set([1, 2, 3])
    >>> s.remove(4)
    Traceback (most recent call last):
      File "", line 1, in 
    KeyError: 4

     
    要素がいくつかの異なる条件で一致しているかどうかを判断するには、setを使用するのが最善の選択です.次の例です.
    months = set(['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec',])
    x1 = 'Feb'
    x2 = 'Sun'
    
    if x1 in months:
        print 'x1: ok'
    else:
        print 'x1: error'
    
    if x2 in months:
        print 'x2: ok'
    else:
        print 'x2: error'
    
    >>>
    x1: ok
    x2: error

     
    転載先:https://www.cnblogs.com/soaringEveryday/p/5044007.html