zoukankan      html  css  js  c++  java
  • 第三章 Python 的容器: 列表、元组、字典与集合

    列表是Python的6种内建序列(列表,元组,字符串,Unicode字符串,buffer对象,xrange对象)之一,

    列表内的值可以进行更改,操作灵活,在Python脚本中应用非常广泛

    列表的语法格式

    文本格式:

    [ 元素1‘元素2’,‘元素3’,……,‘元素n’]

    如:

    ['to','be','or','not','to','be']

    数字格式:

    [数字1,数字2,数字3,数字n]

    如:

    [1,20,15,]

     

    在需要操作一组数值的时候,序列很好用。

    可以通过序列表示数据库中一个人的信息——第一个元素是姓名,第二个元素是年龄。

    根据上述内容编写一个列表

    >>> zhangsan = ['zhangsan',18]

    >>> lisi = ['lisi',19]

    列表中可以嵌套列表,准确的说,列表中可以包含任意的数据类型(字符串、列表、元组、集合)

    >>> database=[zhangsan,lisi]

    >>> database

    [['zhangsan', 18], ['lisi', 19]]

    使用 list()函数也可以创建列表

    从元组中创建列表

    >>> hero =('Zhongkui','Anqila','Houyi','Xiaoqiao')
    >>> list(hero)
    ['Zhongkui', 'Anqila', 'Houyi', 'Xiaoqiao']

    从字符串创建列表
    >>> list('cat')
    ['c', 'a', 't']
    >>>

    使用以下方法可以创建空列表

    >>> empty_list = []
    >>> empty_list
    []
    >>> another_empty_list = list()
    >>> another_empty_list
    []
    >>>

    列表索引和分片

    索引、分片和上一章字符串的索引是一样的,不同之处是字符串的一个索引是当字符,而列表的索引是列表中的一个元素

    也就是,列表中一对单引号中的数据

    1 >>> hero
    2 ('Zhongkui', 'Anqila', 'Houyi', 'Xiaoqiao')
    3 >>> hero_list = list(hero)
    4 >>> hero_list
    5 ['Zhongkui', 'Anqila', 'Houyi', 'Xiaoqiao']
    6 >>> hero_list[0::2]
    7 ['Zhongkui', 'Houyi']
    8 >>>
    View Code

    列表的操作

     

    列表的基本操作

    元素赋值

    >>> x = [1,1,1]

    >>> x[1] = 2

    >>> x

    [1, 2, 1]

     

    删除元素

    >>> provinces

    ['HeNan', 'HeBei', 'ShanDong', 'ShanXi', 'HuNan', 'HuBei', 'Jiangxi', 'Afuhan']

    >>> del provinces[-1]

    >>> provinces

    ['HeNan', 'HeBei', 'ShanDong', 'ShanXi', 'HuNan', 'HuBei', 'Jiangxi']

     

    分片赋值

    >>> num = [1,2,3,4,5]

    >>> num[3:] = [6,7]

    >>> num

    [1, 2, 3, 6, 7]

     

    插入新元素

    >>> num[3:3] = [4,5]

    >>> num

    [1, 2, 3, 4, 5, 6, 7]

     

    分片删除

    >>> del num[1:4]

    >>> num[1:4] = []

    >>> num

    [1, 5, 6, 7]

    列表的方法

    1)追加append

    >>> num = [1,2,3]

    >>> num.append(4)

    >>> num

    [1, 2, 3, 4]

     

    2)统计次数count

    >>> ['to','be','or','not','to','be'].count('to')

    2

     

    3)在列表末尾一次性追加另一个列表的多个值extend

    >>> a = [1,2,3]

    >>> b = [4,5,6]

    >>> a.extend(b[1:3])

    >>> a

    [1, 2, 3, 5, 6]

     

    4)显示列表中某个值第一个匹配项的索引位置index

    >>> aaa = ['Today','is','a','nice','day']

    >>> aaa.index('nice')

    3

     

    5)将对象插入到列表中insert

    >>> num = [1,2,3,4,5,6]

    >>> num.insert(3,'four')

    >>> num

    [1, 2, 3, 'four', 4, 5, 6]

     

    6)移除列表中的一个元素(默认是最后一个),并且返回该元素的值

    >>> x = [1,2,3]

    >>> x.pop()

    3

     

    7)移除列表中某个值的第一个匹配项remove

    >>> x =  ['to','be','or','not','to','be']

    >>> x.remove('be')

     

    8)将列表中的元素反向存放reverse

    >>> x

    ['to', 'or', 'not', 'to', 'be']

    >>> x.reverse()

    >>> x

    ['be', 'to', 'not', 'or', 'to']

     

    9)排序sort和sorted

    >>> x = [3,7,4,64,23,71,2]

    >>> x.sort()

    >>> x

    [2, 3, 4, 7, 23, 64, 71]

     

    >>> sorted(x)

    [2, 3, 4, 7, 23, 64, 71]

     

    两者的区别在于sort不返回生成的列表值,sorted返回列表值

    元组

    创建元组

    元组列表一样,也是一种序列。唯一的不同是元组不能修改。

    语法

    (元素1,元素2,……,元素n)

     

    空元组可以用没有包含内容的两个圆括号来表示

    ()

    如果要创建包括一个值的元组,必须加上逗号

    (42,)

     

    加上逗号和不加逗号代表的含义完全不同

    >>> 3*(42)

    126

    >>> 3*(42,)

    (42, 42, 42)

    可以一次性将元组赋值给多个变量

    >>> marx_tuple = ('Goucho','Chico','Harpo')
    >>> a,b,c = marx_tuple
    >>> a
    'Goucho'
    >>> b
    'Chico'
    >>> c
    'Harpo'
    >>>

    有时候,这个过程被成为元组解包

    tuple() 函数和之前提到的 list() 一样,可把其他类型的数据转换为元组

    >>> tuple('cat')
    ('c', 'a', 't')
    >>> tuple(hero_list)
    ('Zhongkui', 'Anqila', 'Houyi', 'Xiaoqiao')
    >>>

    字典

    Python中通过字典可以通过查找某个特定的键,从而找到它的值

    6.1字典的创建

    6.1.1语法格式

    {a:123,‘b:234,‘c:345,……}

    例:

    >>> {'zhongkui':1511,'houyi':1509,'xiguatian':1508}

    {'zhongkui': 1511, 'houyi': 1509, 'xiguatian': 1508}

    将字典赋值给一个变量可以实现轻松查找

    >>> shark = {'zhongkui':1511,'houyi':1509,'xiguatian':1508}

    >>> shark['xiguatian']

    1508

    注:在字典中的键是唯一的,而值并不唯一

     

    6.1.2通过dict函数创建字典

    >>> Iphone = ('Iphone',5999)

    >>> LV = ('LV',999)

    >>> item = [Iphone,LV]

    >>> d = dict(item)

    >>> d

    {'LV': 999, 'Iphone': 5999}

     

    如果现在商场进了一批红塔山,通过dict可以快速添加字典里

    >>> Hongtashan = ('Hongtashan',7)

    >>> item

    [('Iphone', 5999), ('LV', 199999), ('Hongtashan', 7)]

    >>> d = dict(item)

    >>> d

    {'LV': 199999, 'Iphone': 5999, 'Hongtashan': 7}

     

    通过dict方便对字典内容进行更新

     

     

    4.2字典的基本操作

    字典的基本行为在很多方面与序列类似

    假设现在有个字典名为d

    len(d)返回字典d中项(键-值对)的数量

    d[]返回关联到键上的值

    d[a]=b将值b关联到键a上

    deld[k]删除键为k的项

    k  in  d检查d中是否有含有键为k的项

     

    >>> d

    {'LV': 999, 'QiaQia': 9, 'Iphone': 5999}

    >>> len(d)

    3

    >>> d['LV']

    999

    >>> d['LV']=1000

    >>> d

    {'LV': 1000, 'QiaQia': 9, 'Iphone': 5999}

    >>> del d['LV']

    >>> d

    {'QiaQia': 9, 'Iphone': 5999}

    >>> 'QiaQia' in d

    True

     

     

    字典在脚本中的使用

    创建一个小程序,查询公司内部员工的个人信息

    [root@shark163 ~]# vim people.py

    #!/usr/bin/python

    people = {

            'mv':{

                    'phone': '2341',

                    'addr': 'BeiJing'

            },

            'xiguatian': {

                    'phone': '9102',

                    'addr': 'HeBei'

            },

            'houyi':{

                    'phone': '3158',

                    'addr': 'ShanDong'

            },

            'libai':{

                    'phone': '4556',

                    'addr': 'ShanXi'

            }

    }

     

    [root@shark163 ~]# vim phone.py

    #!/usr/bin/python

    #coding=utf-8

    import people

    people = people.people

    #变量名   模块名  模块中定义的字典名

    labels = {

            'phone': 'phone number',

            'addr': 'address'

    }

     

    while True:

            name = raw_input('Name: ')

            while name in people:

                    request = raw_input('Phone number (p) or address (a)?')

     

                    if request == 'p' : key = 'phone'

                    if request == 'a' : key = 'addr'

     

                    print "%s's %s is %s." % \

                    (name, labels[key], people[name][key])

                    break

            else:

                    YN = raw_input("The user does not exist,enter username again?(Y/N)")

                    if YN == 'N' :

                            print "Program is stopping!!!"

                            break

                    if YN == 'Y' : continue

     

    执行结果:

    [root@localhost ~]# python phone.py

    Name: xiguatian

    Phone number (p) or address (a)?a

    xiguatian's address is HeBei.

    Name: rn

    The user does not exist,enter username again?(Y/N)N

    Program is stopping!!!

     

     

    6.3字典的方法

    1)清空字典中的所有项clear

    >>> example = {'zhongkui':1511,'houyi':1509,'xiguatian':1508,'libai':1506}

    >>> example

    {'zhongkui': 1511, 'libai': 1506, 'houyi': 1509, 'xiguatian': 1508}

    >>> example.clear()

    >>> example

    {}

    >>> example = {}

     

    2)创建一个具有相同项的新字典copy

    >>> y = example.copy()

    >>> y

    {'zhongkui': 1511, 'libai': 1506, 'houyi': 1509, 'xiguatian': 1508}

     

    3)根据给定的键创建一个空值的字典froxiguatianeys

    >>> {}.froxiguatianeys(['mv','yum'])

    {'mv': None, 'yum': None}

     

    默认的空值为None也可以用以下方法手动指定

    >>> {}.froxiguatianeys(['mv','yum'],'(unknown)')

    {'mv': '(unknown)', 'yum': '(unknown)'}

     

    4)访问空值,不报错,返回None值get

    >>> example = {'zhongkui':1511,'houyi':1509,'xiguatian':1508,'libai':1506}

    >>> print example.get('mv')

    None

     

    5)检查字典中是否包含特定键has_key,表达式d.has_key(k)等同于k  in  d

    >>> example

    {'zhongkui': 1511, 'libai': 1506, 'houyi': 1509, 'xiguatian': 1508}

    >>> example.has_key('mv')

    False

     

    6)以列表的方式返回字典中的所有项items

    >>> example.items()

    [('zhongkui', 1511), ('libai', 1506), ('houyi', 1509), ('xiguatian', 1508)]

     

    items相似的有iteritems方法,区别在于item返回的是一个列表,iteritems返回一个迭代器,方便对其调用

    >>> it = y.iteritems()

    >>> list(it)

    [('zhongkui', 1509), ('libai', 1506), ('houyi', 1508), ('xiguatian', 1504)]

     

    7)将字典中的键以列表方式返回keys,而iterkeys则返回针对键的迭代器

    >>> example

    {'zhongkui': 1511, 'libai': 1506, 'houyi': 1509, 'xiguatian': 1508}

    >>> example.keys()

    ['zhongkui', 'libai', 'houyi', 'xiguatian']

    >>> a = example.keys()

    >>> list(a)

    ['zhongkui', 'libai', 'houyi', 'xiguatian']

     

    8)获取给定键的值,并将此项从字典中移除pop

    >>> example

    {'zhongkui': 1511, 'libai': 1506, 'houyi': 1509, 'xiguatian': 1508}

    >>> example.pop('zhongkui')

    1511

    >>> example

    {'libai': 1506, 'houyi': 1509, 'xiguatian': 1508}

     

    9)随机移除列表中的项popitem

    >>> example.popitem()

    ('libai', 1506)

     

    10)用一个字典更新另一个字典update

    >>> example

    {'xiguatian': 1508}

    >>> shark = {'zhongkui':1511,'houyi':1509,'libai':1506}

    >>> example.update(shark)

    >>> example

    {'zhongkui': 1511, 'libai': 1506, 'houyi': 1509, 'xiguatian': 1508}

     

    11)以列表的方式返回字典中的值values,返回值的迭代器itervalues

    >>> example.values()

    [1511, 1506, 1509, 1508]

     

    >>> a =example.itervalues()

    >>> list(a)

    [1511, 1506, 1509, 1508]

     

  • 相关阅读:
    我的ORM之六-- 批量
    我的ORM之五-- 事务
    我的ORM之四--删除
    我的ORM之三 -- 更新
    我的ORM之二--添加
    我的ORM之一 -- 查询
    hmailserver
    jquery 插件原则
    C#中 ToString 和 override ToString 的区别
    linq操作符:元素操作符
  • 原文地址:https://www.cnblogs.com/xiguatian/p/6297637.html
Copyright © 2011-2022 走看看