【python学習ノート】Pythonデータ構造(リスト、メタグループ、辞書、集合)


説明
データ構造の概念はよく理解されており、データを整理するための構造です.すなわち、データ構造は、一連の関連データを格納するためのものである.Pythonには,List,Tuple,Dictionary,Setの4種類の内蔵データ構造がある.
リスト#リスト#
pythonで最もよく使われるデータ型は、下付きでアクセスでき、javaやcの配列と理解できる.しかし、配列よりも機能がn倍強く、listは任意の数のpythonオブジェクトを置くことができ、文字列、文字、整数、浮動小数点などでもよいし、作成、追加、削除も便利である.
1.listの作成(内部オブジェクトは文字列、文字、数字、混在をサポート)
List = ['aaa', 101, 0.01, 'ccc','A','B','C']

2.アクセスリスト
>>>print(List[0])

'aaa'

3.listスライス
>>>print(List[1:3])

[101, 0.01]

4.listネスト
bList=[100,200,['aaa','bbb','ccc']]
>>>print(bList[2][0])
'aaa'

5.list挿入削除
//append  
List.append('D')
>>>print(List)
['aaa', 101, 0.01, 'ccc','A','B','C','D']

//insert  
List.insert(0,'E')
>>>print(List)
['E',aaa', 101, 0.01, 'ccc','A','B','C','D']

//del  (        )
List = ['aaa', 101, 0.01, 'ccc','A','B','C']
del List(0)
>>>print(List)
[101, 0.01, 'ccc','A','B','C']

//remove  (     ,         )
List = ['aaa', 101, 0.01, 'ccc','A','B','C']
List.remove('aaa')
>>>print(List)
[101, 0.01, 'ccc','A','B','C']

//pop    
List = ['aaa', 101, 0.01, 'ccc','A','B','C']
List.pop()
>>>print(List)
['aaa', 101, 0.01, 'ccc','A','B']


6.listサポート+および*
list1=[1,2,3]

list2=[100,200,300]

list3=list1+list2

print(list3)

>>>[1, 2, 3, 100, 200, 300]

list4=['a','b','c']

list5=list4*3

print(list5)

>>>['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']

7.listソート(sort関数転送reverseはTrueまたはFalseで降順または昇順)
sortメソッドには、keyとreverseの2つのオプションパラメータがあります.
keyは、ソート・プロシージャの合計呼び出しの関数を使用する必要があります.
x = ['mmm', 'mm', 'mm', 'm' ]
x.sort(key = len)
print x # ['m', 'mm', 'mm', 'mmm']

reverseは降順ソートを実現し、ブール値を指定する必要があります.
List = [3, 2, 4, 6]
List.sort(reverse=True)
print(List)
List = [6, 4, 3, 2]

8.リスト長の計算
aList=[1,2,3,4,5]
print(len(aList))
>>>5

9.list最大値最小値の計算
aList=[1,2,3,4,5]
print(min(aList))
>>>1
print(max(aList))
>>>5

10.list拡張(extend関数を内蔵し、+と差が少ないように見えますが、違いは+が新しいリストを返し、extendがリストを直接修正したことです)
aList=[1,2,3]
b=[4,5,6]
aList.extend(b)
print(aList)
>>>[1, 2, 3, 4, 5, 6]

11.リスト内の要素のインデックスを検索//内蔵関数index
aList=['This','is','a','very','good','idea']
print(alist.index('very'))
>>>3

12.あるメタグループがリストにある回数を統計し、関数countを内蔵する
aList=['to','do','or','not','to','do']
print(aList.count('to'))
>>>2

13.listその他の操作
数値増加リストを作成します.
1)pList = range(N),        0~N-1   。 :pList = range(10) ->pList = [0,1,2,3,...,9]。

2)pList = range(sn,en),        sn~en-1   。 :pList =  range(1,5) ->pList = [1,2,3,4]。

3)pList = range(sn,en,inc),        inc     。 :pList = range(1,10,2) ->pList = [1,3,5,7,9]

固定値初期化:
pList = [value for index  in range(N)],       N   ,     value.
 :value = "x",N=10, pLsit = ["x","x",...,"x"]

          :pList = [value]*N。

リストのコピー:
1)pL1 = pL:pL1 pL   , pL1 pL        ,        ,          。

         :pL = [1,2,3],pL1 = pL,pL1[2] = 33,->pL = pL1 = [1,2,33]

2)pL2 = pL[:]:pL2 pL     (   ), pL2 pL      ,        ,        。

メタグループ
メタグループはリストと同様にシーケンスであり、唯一の違いは変更できないことです.
作成
t1=1,2,3
t2="jeffreyzhao","cnblogs"
t3=(1,2,3,4)
t4=()
t5=(1,)
print t1,t2,t3,t4,t5
>>>(1, 2, 3) ('jeffreyzhao', 'cnblogs') (1, 2, 3, 4) () (1,)

  
a、       ,        ;

b、                 ;

c、                   ;

d、        ,      (,);

tuple関数
tuple      list      :     (     )            。        ,           :
t1=tuple([1,2,3])
t2=tuple("jeff")
t3=tuple((1,2,3))
print t1
print t2
print t3

>>>
(1, 2, 3)
('j', 'e', 'f', 'f')
(1, 2, 3)

辞書
  • プロパティ:名前でインデックスされたパケットデータ.メタグループとリストは数値順にインデックスされますが、辞書のインデックスは数値、アルファベット、文字列、記号などです.辞書では、インデックスをキー、すなわちkeyと呼び、対応する値を値、すなわちvalueと呼ぶ.
  • 作成:dic={key 1:value 1,key 2:value 2}は、空の辞書dic={}を作成してから、dic[「one」=「firstValue」などの初期化を行うことができます.注意:キーは一意で、辞書は最後に割り当てられたキー値のみを認識します.たとえば、dic={1:1,2:2,1:3}->dic={1:3,2:2}、最後の要素(1:3)が「破棄」されます.
  • アクセス:dic[key]は、keyに対応する値を取得し、keyが存在しない場合はエラーを報告します.
  • 一般的な方法と操作:
  •     1)D.get(key, defualtValue):  key    , key   ,         defualtValue,           None。
    2)D.has_key(key) :          key,     TRUE,  FALSE。
    3)D.keys():             。
    4)D.values():             。
    5)D.items():               , [(key1,value1),(key2,value2),(key3,value3),...]。
    
    6)D.update(dic2):   dic2         D 。
    7)D.popitem():             (  ),    。          。
    8)D.clear():           None
    
    9)D.pop(key):          ,   key    。key    ,             ,        ,        !!!
    10)D.copy():    ,           。 d = {
        1:1,2:2},d1 = d.copy() ->d1 = {
        1:1,2:2}。
    11)cmp(dict1,dict2):    ,(        、   、    ),       1,       -1012)       dict(dict1.items()+dict2.items()+dict3.items()---)

    しゅうごう
    pythonのsetは他の言語と類似しており、関係テストと重複要素の除去を含む無秩序な重複要素セットである.集合オブジェクトはunion(連合)、intersection(交差)、difference(差)、sysmmetric difference(対称差セット)などの数学演算もサポートする.
    setsは、x in set、len(set)、for x in setをサポートします.無秩序な集合としてsetsは要素の位置や挿入点を記録しません.したがって、setsはindexing、slicing、または他のクラスシーケンス(sequence-like)の操作をサポートしません.
    作成
    se = set([11,22,33,44])
    print(se)
    {
        33, 11, 44, 22}
    print(type(se))
    <class 'set'>
      
    >>> se = {
        'liu','yao'}
    >>> se
    {
        'yao', 'liu'}
    >>> type(se)
    <class 'set'>
    1.add(    )
    
    >> se.add('123')
    >>> se
    {
        'yao', 'liu', '123'}
    2.clear(    )
    
    >>> se.clear()
    >>> se
    set()
    3.copy(   )
    
    >>> se_1 = {
        'liu','yao'}
    >>> se_2=se_1.copy()
    >>> se_2
    {
        'yao', 'liu'}
    4.difference    
    
    >>> se_1 = {
        'liu','yao','shi','shei'}
    >>> se_2 = {
        'haode','shi','liu'}
    #  se_2  se_1      
    >>> se_1.difference(se_2)
    {
        'yao', 'shei'}
    #  se_1  se_2      
    >>> se_2.difference(se_1)
    {
        'haode'}
    5.difference_update    
    
    >>> se_1
    {
        'shi', 'yao', 'liu'}
    >>> se_2
    {
        'shi', 'liu', 'haode'}
    >>> se_1.difference_update(se_2)
    >>> se_1
    {
        'yao'}
    6.discard      
    
    >>> se_1
    {
        'shi', 'yao', 'shei', 'liu'}
    >>> se_1.discard('shei')
    >>> se_1
    {
        'shi', 'yao', 'liu'}
    7.intersection           
    
    >>> se_1={
        'liu','yao','shi','sha','bi'}
    >>> se_2={
        'liu','yao','shi','er','bi'}
    >>> se_1.intersection(se_2)
    {
        'liu', 'shi', 'yao', 'bi'}
    8.intersection_update            
    
    >>> se_1={
        'liu','yao','shi','sha','bi'}
    >>> se_2={
        'liu','yao','shi','er','bi'}
    >>> se_1.intersection_update(se_2)
    >>> se_1
    {
        'liu', 'shi', 'yao', 'bi'}
    9.isdisjoint      ,    true,   false
    
    >>> se_1={
        'liu','yao','shi','sha','bi'}
    >>> se_2={
        'liu','yao','shi','er','bi'}
    >>> se_1.isdisjoint(se_2)
    False
    >>> se_2.isdisjoint(se_1)
    False
     
    >>> se_1={
        'liu','yao'}
    >>> se_2={
        'liuu','yaoo'}
    >>> se_2.isdisjoint(se_1)
    True
    10.issubset       
    
    >>> se_1 = {
        'liu','yao'}
    >>> se_2 = {
        'liu','yao','shabi'}
    #  se_1   se_2   
    >>> se_1.issubset(se_2)
    True
    11.issuperset       
    
    >>> se_1 = {
        'liu','yao'}
    >>> se_2 = {
        'liu','yao','shabi'}
    #  se_1   se_2   
    >>> se_1.issuperset(se_2)
    False
    #  se_2   se_1   
    >>> se_2.issuperset(se_1)
    True
    >>>
    12.pop      
    
    >>> se_1 = {
        'liu','yao','sha','bi'}
    >>> se_1.pop()
    'sha'
    13.remove        
    
    >>> se_1 = {
        'liu','yao','sha','bi'}
    >>> se_1.remove('bi')
    >>> se_1
    {
        'sha', 'liu', 'yao'}
    >>> 
    14.symmetric_difference        ,       
    
    >>> se_1 = {
        'liu','yao','sha','bi'}
    >>> se_2 = {
        'liu','yao','shabi'}
    >>> se_1.symmetric_difference(se_2)
    {
        'sha', 'shabi', 'bi'}
    >>> b=se_1.symmetric_difference(se_2)
    >>> b
    {
        'sha', 'shabi', 'bi'}
    15.symmetric_difference_update        ,         
    
    >>> se_1 = {
        'liu','yao','sha','bi'}
    >>> se_2 = {
        'liu','yao','shabi'}
    >>> se_1.symmetric_difference_update(se_2)
    >>> se_1
    {
        'sha', 'shabi', 'bi'}
    16.union  
    
    >>> se_1
    {
        'sha', 'shabi', 'bi'}
    >>> se_2
    {
        'shabi', 'liu', 'yao'}
    >>> se_1.union(se_2)
    {
        'yao', 'sha', 'shabi', 'liu', 'bi'}
    17.update    
    
    >>> se_1
    {
        'sha', 'shabi', 'bi'}
    >>> se_1.update('liuyao')
    >>> se_1
    {
        'y', 'o', 'shabi', 'bi', 'u', 'i', 'sha', 'l', 'a'}
      :
    
    old_dict = {
        "#1":{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 80 },
        "#2":{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 80 },
        "#3":{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 80 }
    }
    new_dict = {
        "#1":{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 800 },
        "#3":{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 80 },
        "#4":{ 'hostname':'c2', 'cpu_count': 2, 'mem_capicity': 80 }
    }
    #  old_dict  
    old = set(old_dict.keys())
    print(old)
    #  new_dict  
    new = set(new_dict.keys())
    print(new)
    #        (  )
    update_set = old.intersection(new)
    print(update_set)
    #          (  )
    delete_set = old.difference(new)
    print(delete_set)
    #          ()
    add_set = new.difference(update_set)
    print(add_set)

    leason|個人ブログ