zoukankan      html  css  js  c++  java
  • Python_dict和set

    Python_dict和set 
    author:lxy




    dict字典
    Python内置了字典,dict的支持,全称dictionary,以key_value的形式存贮,具有极快的查找速度,在其他语言中称为map。
    在list中查找元素,list越大查找越慢,
    在dict中,查找某一个元素会根据key计算出对应value的位置。

    初始化一个空的dict
    d = {}
    添加元素
    d['x'] = 1

    存贮dict的方式:初始化时指定,也可以通过key放入。
    这种key_value存储方式,在放入元素的时候,必须根据key算出value存放位置,取的时候也是
    由于一个key只能对应一个value,所以,同一个key多次放入后面的值会覆盖前面的值
    取值时,如果key不存在,dict报错KeyError错误

    避免key不存在错误
    1、使用in判断key是否存在
    2、通过dict的get方法,value存在返回,不存在返回None,或者指定不存在返回指定的value

    例1
    >>> d = {'z':1}                #初始化并指定值
    >>> 'z' in d                #判断'z'是否在字典中
    True
    >>> 'c' in d
    False

    例2
    >>> d = {'z':1}
    >>> d.get('z')       #返回字典中key为'z'的value
    1
    >>> d.get('x')
    >>>                     #不存在返回None,注意在命令行中不显示
    >>> d.get('x',-1)  #如果存在返回,如果不存在返回指定的值
    -1

    删除元素:使用pop(key)方法弹出元素

    和list比较,dict的特点
    1、查找、和插入速度快,和元素存储多少没有关系
    2、需要占用大量的内存,内存浪费多
    所以dict是用空间来换取时间的一种方式

    注意,dict的key必须是不可变对象(在Python中整数、字符串都是不可变的),

    因为存取都是根据key的hash算法来确定位置的。


    ==============
    set
    set和dict类似,和dict相比
    set中存储的相当于dict中的key,key不可重复、无序,当存入相同元素的时候后者无效。

    set的方法
    add(key)        #添加元素
    remove(key) #删除元素

    对于set可以看成数学意义上的无序不重复元素集合,
    可以使用两个set进行数学意义上的交集,并集等操作


    >>> s1 = set(['a','b'])
    >>> s2 = set(['b','c'])
    >>> s = s1 & s2
    >>> s
    {'b'}
    >>> s = s1 | s2
    >>> s
    {'a', 'b', 'c'}
    >>> 

    谈不可变对象
    str是不可变对象,
    str中有一个replace方法,虽然使用replace方法可以返回一个相对于原来字符串改变了的值,但是原有字符串并没有改变
    真相是在使用replace方法指向了一个新的字符串并返回

    在set中需要加入不可变的key,tuple属于不可变对象,但是当tuple中含有list时tuple就变成可变的了
    所以在使用tuple创建set的时候tuple中不可以含有list


    来自群组: Java用户组
    用心-细心-专心-决心 学习就像爬大山,一步一步向前走 -态度决定高度-
  • 相关阅读:
    【转】win8.1下安装ubuntu
    Codeforces 1025G Company Acquisitions (概率期望)
    Codeforces 997D Cycles in Product (点分治、DP计数)
    Codeforces 997E Good Subsegments (线段树)
    Codeforces 1188E Problem from Red Panda (计数)
    Codeforces 1284E New Year and Castle Building (计算几何)
    Codeforces 1322D Reality Show (DP)
    AtCoder AGC043C Giant Graph (图论、SG函数、FWT)
    Codeforces 1305F Kuroni and the Punishment (随机化)
    AtCoder AGC022E Median Replace (字符串、自动机、贪心、计数)
  • 原文地址:https://www.cnblogs.com/xianyou-liang/p/8503344.html
Copyright © 2011-2022 走看看