学习PYTHON 入门日志 (四)

1. 2005-06-03 元组-序列-字典

继续:元组(tuple),序列(sequence),字典(dictionary)
15:元组 tuple
    a=(3,4,5,6)  这就是个元组,括号可以省略
    tuple就是 list 的常量化
    所以不能 pop ,remove,insert 等
    tuple可以下标访问或获得子元组
    注意下标用[ ] 不是()
    >>> b=3,4,5,6,7,8
    >>> b[2]
    5
    >>> b[1:3]
    (4, 5)
    tuple可以多变量赋值(其实list也可以多变量赋值的)如
    >>> j,k=["df",3]
    >>> k
    3
    >>> j
    'df'
    >>> p,q=("e323",k)
    >>> q
    3
    >>> p
    'e323'
    表示只有一个值的tuple用('df',)加个逗号来表示
    tuple 是list的简化版,没有动态内存的分配
16:序列sequence
    sequence 就是list  string  tuple 的总称 有一些共性以下是主要操作
    (a)in 判断某个object在sequence中
    >>> x=12
    >>> l=[12,13]
    >>> if x in l : print "x is in l"
    ...
    x is in l
   (b)得到sequence的长度 len(sequence)
   (c)取下标操作 sequence[i]
   (d)取子sequence 用 sequence[star : end ]
      注意获得的是[sequence[star],sequence[star+1],..,sequence[end-1]]
      最后一个是sequence[end-1]不是sequence[end]
   (e)用加号+ 可以连接两个sequence
   (f)用称号*可以重复几个sequence 如
       >>> (1,2,3)*3
       (1, 2, 3, 1, 2, 3, 1, 2, 3)
   (g)可以使用list comprehension 再复习一下
         [ <expr1> for k in L if <expr2> ]
         表示
         returnList=[]
         for k in L:
                 if <expr2>: returnList.append(<expr1>)
          return returnList;
18: 字典 dictionary
      很类似c++中的map
      >>> PersonInfor={"WuKong":100,"BaJie":80,"WuJing":75}
      >>> PersonInfor
      {'WuJing': 75, 'BaJie': 80, 'WuKong': 100}
      这就是个dictionary ,用{ } 括起来,用:连接key和value组成pair对应关系
      引用的时候以key为下标就可以
      >>> PersonInfor['BaJie']
      80

      >>> del PersonInfor['WuJing']      #这个我不明白,del的动作是谁发出的,
                                  #这个不象面向对象的东西了
      >>> PersonInfor
      {'BaJie': 80, 'WuKong': 100}
      也可以用tuple来初始化,前面加上 dict  如:
      >>> pricelist=dict([('clock',12),("table",100),("xiao",100)])
      >>> pricelist
      {'table': 100, 'xiao': 100, 'clock': 12}
      >>> pricelist=dict([(x,10*x) for x in [1,2,3]])
      >>> pricelist
      {1: 10, 2: 20, 3: 30}
      增加一个字典元素也很简单 直接用赋值就可以了如
      >>> pricelist["apple"]=12
      读取不存在的元素 就返回异常
      >>> pricelist['orange']
      Traceback (most recent call last):
        File "<stdin>", line 1, in ?
        KeyError: 'orange'
19:dictionary的操作
     (a)清空dictionary
         D.clear()
     (b)复本dictionary
         D.copy()
       注意与 赋值的区别:
       这是"="就像取了个别的名字一样
       >>> a
       {'table': 100, 'apple': 12, 'xiao': 100, 'clock': 12}
       >>> b=a
       >>> b
       {'table': 100, 'apple': 12, 'xiao': 100, 'clock': 12}
       >>> a["milk"]=901
       >>> b
       {'table': 100, 'milk': 901, 'apple': 12, 'xiao': 100, 'clock': 12}
       这是"copy" 是独立出来的了
       >>> c=a.copy()
       >>> a["egg"]=405
       >>> c
       {'apple': 12, 'clock': 12, 'table': 100, 'milk': 901, 'xiao': 100}
     (c)获得值
        D.get(key),注意与下标访问D[key]的区别
        在对应值不存在的时候一个返回 None 一个返回异常
        a.get("abc",100) 其中100为默认值,如果找不到"abc"就返回100
        所以D.get(key) 相当与D.get(key,None)
      (d)查询有无 key
        c.has_key(key)
        >>> c
        {'apple': 12, 'clock': 12, 'table': 100, 'milk': 901, 'xiao': 100}
        >>> c.has_key('clock')
        True
        >>> c.has_key('clocok')
        False
     (d)获得元素的list
        D.items() 多说无用,看个例子就好了
       >>> c
       {'apple': 12, 'clock': 12, 'table': 100, 'milk': 901, 'xiao': 100}
       >>> c.items()
       [('apple', 12), ('clock', 12), ('table', 100), ('milk', 901),
('xiao', 100)]
     (e) 获得所有的keys到 list中
        >>> c.keys()
        ['apple', 'clock', 'table', 'milk', 'xiao']
     (f) 获得所有的values到list中
       >>> c.values()
       [12, 12, 100, 901, 100]
     (g)  更新赋值
        D.update(E)
        可以这样理解
        for k in E.keys():
             D[k]=E[k]
        注意,D保留了E中没有的元素,D和E有相同的Key 对应的赋值
        为E的(key ,value),D中没有的将从E添加进来
     (h) 从字典中弹出一个元素并删除
          D.popitem()
          如果为空了,就返回异常。
          注意,dictionary是无序排列的,所以弹出的也是随机的(不知对否)

以上是python的tuple sequence dictionary,完成Python 的数据类型
下一篇将是Python 程序流程控制

邹胖小 2005年6月3日 祝大家快乐安康 周末愉快 我要好好去运动一下,请大家也注意身体
为自己的理想努力工作50年