• 基础知识回顾——列表和字典


    列表

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

    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()等方法

  • 相关阅读:
    最好用的html复制插件——Clipboard.js
    最好用的轮播插件——Swiper.js
    媒体查询
    函数防抖和节流
    JQ增删改查localStorage实现搜索历史功能
    vscode如何设置html模板
    js中innerHTML、outerHTML、innerText、outerText的区别
    JS实现一个简单的网页钟表
    Sql Server 2014完全卸载
    照片尺寸大小怎样换算?
  • 原文地址:https://www.cnblogs.com/Ryana/p/5971161.html
Copyright © 2020-2023  润新知