zoukankan      html  css  js  c++  java
  • Python学习笔记(八)—— 使用dict和set

    一、dict

    1、定义:

         Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度

    2、优势:

         dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。

         第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字。无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。

    3、初始化定义

    d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}

    4、通过key改变value

    d['Michael'] = 67

         但是一个key只能存放一个value,后面的value会覆盖之前的value

    5、key不存在,dict会报错,避免错误的两种方法:

    (1)使用  in  判断key是否存在

    'Thomas' in d
    False
    

    (2)通过dict提供的  get  方法,可以返回None(在交互式命令行中不显示结果)或者自己指定的value

    d.get('Thomas')
    d.get('Thomas', -1)
    -1
    

    6、删除一个key

    d.pop('Bob')

          返回删除key对应value数值

    7、注意点:

          要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key

    二、set

    1、定义

          set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

    2、创建:

    s = set([1, 2, 3])

         重复元素在set中自动被过滤:

    >>> s = set([1, 1, 2, 2, 3, 3])
    >>> s
    {1, 2, 3}

    3、通过add(key)方法添加元素到set中

    >>> s.add(4)
    >>> s
    {1, 2, 3, 4}
    >>> s.add(4)
    >>> s
    {1, 2, 3, 4}

    4、通过remove(key)可以删除元素

    >>> s.remove(4)
    >>> s
    {1, 2, 3}

    5、set的作用:

           set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

    >>> s1 = set([1, 2, 3])
    >>> s2 = set([2, 3, 4])
    >>> s1 & s2
    {2, 3}
    >>> s1 | s2
    {1, 2, 3, 4}

    三、再议不可变对象:

         对于可变对象list,对list进行操作的时候,list内部的内容会发送变化:

    >>> a = ['c', 'b', 'a']
    >>> a.sort()
    >>> a
    ['a', 'b', 'c']

            但是不可变对象,对于str,来说是不会变化的

    >>> a = 'abc'
    >>> a.replace('a', 'A')
    'Abc'
    >>> a
    'abc'

            为了方便理解,改变代码如下:

    >>> a = 'abc'
    >>> b = a.replace('a', 'A')
    >>> b
    'Abc'
    >>> a
    'abc'

            要始终牢记的是,a是变量,而'abc'才是字符串对象!有些时候,我们经常说,对象a的内容是'abc',但其实是指,a本身是一个变量,它指向的对象的内容才是'abc'

            当我们调用a.replace('a', 'A')时,实际上调用方法replace是作用在字符串对象'abc'上的,而这个方法虽然名字叫replace,但却没有改变字符串'abc'的内容。相反,replace方法创建了一个新字符串'Abc'并返回,如果我们用变量b指向该新字符串,就容易理解了,变量a仍指向原有的字符串'abc',但变量b却指向新字符串'Abc'了:

             所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

  • 相关阅读:
    9.11 eventbus
    9.10,,,实现new instanceof apply call 高阶函数,偏函数,柯里化
    9.9 promise实现 写完了传到gitee上面了,这里这个不完整
    9.5cors配置代码
    9.5 jsonp 实现
    9.5 http tcp https总结
    9.3 es6 class一部分 and es5 class 发布订阅
    8.30 cookie session token jwt
    8.30vue响应式原理
    warning: LF will be replaced by CRLF in renard-wx/project.config.json. The file will have its original line endings in your working directory
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/6349509.html
Copyright © 2011-2022 走看看