zoukankan      html  css  js  c++  java
  • 基础知识回顾——列表和字典

    列表

    列表是可以改变的序列,所有的通用序列操作都适用,且存在一些专门的方法。

    1.列表基本操作

     1 #元素赋值
     2 >>> x = [1,1,3]
     3 >>> x[1] = 2
     4 >>> x
     5 [1, 2, 3]
     6 
     7 #分片赋值
     8 >>> name = list('Ryana')
     9 >>> name
    10 ['R', 'y', 'a', 'n', 'a']
    11 >>> name[2:] = 'ita'
    12 >>> name
    13 ['R', 'y', 'i', 't', 'a']

    2.列表方法

    1)append:用于在列表末尾添加新的对象(注:直接修改原来的列表)

    1 >>> list1 = [1,2,4]
    2 >>> list1.append(8)
    3 >>>list1                                                                                                                
    [1, 2, 4, 8]

    2)count:用于统计某个元素在列表中出现的次数

    1 >>> ['to','be','or','not','to','be'].count('o')
    2 0
    3 >>> ['to','be','or','not','to','be'].count('to')
    4 2

    3)extend:用于一次性在列表末尾添加另一个序列的多个值

    1 >>> a = [1,2,3]
    2 >>> b = [4,5,6]
    3 >>> a.extend(b)
    4 >>> a
    5 [1, 2, 3, 4, 5, 6]

    4)index:用于从列表中找出某个值第一个匹配项的索引位置

    1 >>> lst = ['to','be','or','not','to','be']
    2 >>> lst.index('to')
    3 0

    5)insert:用于将对象插于列表中,.insert(位置,元素)

    1 >>> nums = [1,3,6,7]
    2 >>> nums.insert(2,'5')
    3 >>> nums
    4 [1, 3, '5', 6, 7]
    5 >>> nums.insert(2,5)
    6 >>> nums
    7 [1, 3, 5, '5', 6, 7]

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

    1 >>> x = [1,3,5]
    2 >>> x.pop()
    3 5
    4 >>> x.pop(0)
    5 1
    6 >>> x
    7 [3]

    7)remove:用于移除列表中某个值的第一个匹配项,不存在的元素报错

     1 >>> list1 = ['to','be','or','not','to','be']
     2 >>> list1.remove('be')
     3 >>> list1
     4 ['to', 'or', 'not', 'to', 'be']
     5 >>> x.remove('bee')
     6 
     7 Traceback (most recent call last):
     8   File "<pyshell#38>", line 1, in <module>
     9     x.remove('bee')
    10 ValueError: list.remove(x): x not in list

    8)reverse:用于将列表中的元素反向存放(注:reversed函数返回的是一个迭代器对象)

    1 >>> x = [1,3,5]
    2 >>> x.reverse()
    3 >>> x
    4 [5, 3, 1]

    9)sort:用于在原始位置对列表进行排序(注:sorted函数会返回一个有序副本)

    1 >>> x = [7,9,1,0,5]
    2 >>> x.sort()
    3 >>> x
    4 [0, 1, 5, 7, 9]

    10)高级排序

     1 #cmp(x,y):x<y,返回负数;x>y,返回整数
     2 
     3 >>> cmp(99,100)
     4 -1
     5 >>> cmp(4,1)
     6 1
     7 
     8 #key参数:为每个元素创建一个键,然后所以元素根据键来排序
     9 
    10 >>> x = ['c++','python','go','java']
    11 >>> x.sort(key=len)
    12 >>> x
    13 ['go', 'c++', 'java', 'python']

    字典

    字典是python中唯一内建的映射类型,字典中的值并没有特殊的顺序,都是存储在一个特定的键下,键可以是数字、字符串甚至是元组。

    1.字典的基本操作:同序列类似

    1)创建字典

     1 #通过序列建立字典 
     2 >>> item = [('name','Ryana'),('age','12')]
     3 >>> d = dict(item)
     4 >>> d
     5 {'age': '12', 'name': 'Ryana'}
     6  
     7 #通过关键字参数创建字典 
     8 >>> d = dict(name = 'Ryana',age = '12')
     9 >>> d
    10 {'age': '12', 'name': 'Ryana'}

    2)len(d):返回字典d的长度

    3)d[k]:返回键k的值

    4)d[k] = v:将值v关联到键k

    5)del d[k] :删除键k的项

    6)k in d :检查d是否含有键为k的项  (注:字典查找的是键,序列查找的是值,数据结构的规模越大,字典检查成员资格比列表更高效)

    7)字典的键可以是任意的不可不类型,比如浮点数、字符串或者元组

    8)字典格式化字符串

    1 >>> phonebook = {'ann':'5570','beth':'7102'}
    2 >>> "beth's phone number is %(beth)s " %phonebook
    3 "beth's phone number is 7102 "

    2.字典方法

    1)clear:用于清除字典中的所有项,原地操作

     1 >>> x = {}
     2 >>> y = x
     3 >>> x['key'] = 'value'
     4 >>> y
     5 {'key': 'value'}
     6 >>> x.clear()
     7 >>> x
     8 {}
     9 >>> y
    10 {}

    2)copy:返回一个具有相同键-值对的新字典,这个方法实现的是浅拷贝,浅拷贝只拷贝数据不拷贝数据之间的关系,新的数据和旧的数据使用的是同一块内存空间;深拷贝既拷贝数据又拷贝数据之间的关系,新的数据和旧的数据使用的是不同的内存空间,需要copy模块的deepcopy函数完成

     1 >>> import copy
     2 >>> d = {'s':'shenzhen','w':'wuhan'}
     3 >>> d1 = copy.copy(d)    #浅拷贝
     4 >>> d1
     5 {'s': 'shenzhen', 'w': 'wuhan'}
     6 >>> d2 = copy.deepcopy(d)   #深拷贝
     7 >>> d2
     8 {'s': 'shenzhen', 'w': 'wuhan'}
     9 >>> d['b'] = 'beijing'       #新增子项
    10 >>> d1
    11 {'s': 'shenzhen', 'w': 'wuhan'}
    12 >>> d2
    13 {'s': 'shenzhen', 'w': 'wuhan'}
    14 >>> d['s'] = 'shanghai'   #改变子项
    15 >>> d1
    16 {'s': 'shenzhen', 'w': 'wuhan'}
    17 >>> d2
    18 {'s': 'shenzhen', 'w': 'wuhan'}

    可以发现原字典做新增或者改变子项操作,根本不影响d1和d2,都是深拷贝??再看一例:

     1 >>> import copy
     2 >>> d = {'s':['shenzhen','shang'],'w':'wuhan'}
     3 >>> d1 = copy.copy(d)
     4 >>> d1
     5 {'s': ['shenzhen', 'shang'], 'w': 'wuhan'}
     6 >>> d2 = copy.deepcopy(d)
     7 >>> d2
     8 {'s': ['shenzhen', 'shang'], 'w': 'wuhan'}
     9 >>> d['b'] = 'beijing'       #新增子项
    10 >>> d1
    11 {'s': ['shenzhen', 'shang'], 'w': 'wuhan'}
    12 >>> d2
    13 {'s': ['shenzhen', 'shang'], 'w': 'wuhan'}
    14 >>> d['s'][1] = 'shanghai'    #改变子项
    15 >>> d1
    16 {'s': ['shenzhen', 'shanghai'], 'w': 'wuhan'}
    17 >>> d2
    18 {'s': ['shenzhen', 'shang'], 'w': 'wuhan'}

    发现差别了没,这次改变子项影响了d1,没影响d2。

    总结:当只有一级目录,原字典的操作,对浅拷贝和深拷贝都没有影响;当目录不是一级,原字典的改变子项操作影响浅拷贝,不影响深拷贝。

    3)fromkeys:使用给定的键建立新的字典

    1 >>> dict.fromkeys(['name','age'])
    2 {'age': None, 'name': None}
    3 >>> dict.fromkeys(['name','age'],'unknown')
    4 {'age': 'unknown', 'name': 'unknown'}

    4)get:用来访问字典项,即使访问不存在的项也不会出错

    1 >>> print d['name']
    2 
    3 Traceback (most recent call last):
    4   File "<pyshell#74>", line 1, in <module>
    5     print d['name']
    6 KeyError: 'name'
    7 >>> print d.get('name')
    8 None

    5)items和iteritems:items将字典的所有项以列表的方式返回,iteritems作用类似,但会返回一个迭代器对象

    1 >>> dict1= {'ann':'5570','beth':'7102'}
    2 >>> dict1.items()
    3 [('ann', '5570'), ('beth', '7102')]
    4 >>> it = dict1.iteritems()
    5 >>> it
    6 <dictionary-itemiterator object at 0x036B3600>
    7 >>> list(it)
    8 [('ann', '5570'), ('beth', '7102')]

    6)keys和iterkeys:keys方法将字典中的键以列表形式返回,而iterkeys返回针对键的迭代器

    values和itervalues:values方法将字典中的键以列表形式返回,且可以有重复的元素,而itervalues返回针对键的迭代器

    1 >>> d = {'a':'1','b':'2','c':'3'}
    2 >>> d.values()
    3 ['1', '3', '2']
    4 >>> d.keys()
    5 ['a', 'c', 'b']
    6 >>> d.iterkeys()
    7 <dictionary-keyiterator object at 0x0314D660>
    8 >>> d.itervalues()
    9 <dictionary-valueiterator object at 0x0314D6C0>

    7)pop:用来取出对于给定键的值

    1 >>> dic = {'ann':'5570','beth':'7102'}
    2 >>> dic.pop('ann')
    3 '5570'
    4 >>> dic
    5 {'beth': '7102'}

    8)popitem:随机弹出字典中的一项,字典没有顺序概念

    1 >>> dic = {'ann':'5570','beth':'7102','claire':'0551'}
    2 >>> dic.popitem()
    3 ('ann', '5570')

    9)update:可以利用一个字典更新另外一个字典,若有相同的键则会覆盖

    1 >>> dic1 = {'ann':'5570','beth':'7102''s':'shanghai'}
    2 >>> dic2 = {'s':'shenzhen','w':'wuhan'}
    3 >>> dic1.update(dic2)
    4 >>> dic1
    5 {'ann': '5570', 'beth': '7102', 's': 'shenzhen', 'w': 'wuhan'}

    总结:列表是可变的序列,有append()、count()、extend()、index()、insert()、pop()、remove()、reverse()、sort()等方法

       字典是映射类型,键值成对没有顺序,有clear()、copy()、fromkeys()、get()、pop()、update()等方法

  • 相关阅读:
    CSUFT 1002 Robot Navigation
    CSUFT 1003 All Your Base
    Uva 1599 最佳路径
    Uva 10129 单词
    欧拉回路
    Uva 10305 给任务排序
    uva 816 Abbott的复仇
    Uva 1103 古代象形文字
    Uva 10118 免费糖果
    Uva 725 除法
  • 原文地址:https://www.cnblogs.com/Ryana/p/5971161.html
Copyright © 2011-2022 走看看