美文网首页初学者
python 基础-使用list(列表)、dict、set、可变

python 基础-使用list(列表)、dict、set、可变

作者: 我爱学python | 来源:发表于2019-12-07 14:45 被阅读0次

    dict是字典,可以储存键值对类型的值,set与dict相同,只是set只储存key值,而不储存value。

    补充:

    python中数值类型(int、float)、元组、str是不可变对象,而列表list、字典dict、集合set是可变对象

    list.cout('a')查看list中'a'的个数

    >>> l
    ['a', 2]
    >>> l.count('a')
    

    List

    问题:list index out of range 和 list assignment index out of range的原因

    >>> a=[[],[],[1]]
    >>> a[0][-1]=5
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: list assignment index out of range#是再下标溢出的情况下依旧分配值的时候出现的异常
    >>> a[0][-1]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: list index out of range#是访问的下标超出了list的地址
    >>> a[0][1]=5
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: list assignment index out of range
    >>> a[0][1]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: list index out of range
    >>>
    

    dict

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    a={'sex':'nan'}
    >>> 'sex' in a#默认在key中检查
    True
    >>> 'nan' in a
    False
    >>> 'sex' in a.values()
    False
    >>> 'nan' in a.values()
    True
    >>> 'sex' in a.keys()
    True
    >>>
    

    dict又称map,他以键值对的形式储存数据,并且为了查找方便,在存储数据的时候,会根据key的值去计算应该放置的位置。为了保证计算位置的算法的结果不冲突,所以就要求dict数据的key值不能重复。由于这种特性,使得在查找数据时,与list的从头开始查找相比,dict中储存的数据查找时极快的,但是对空间有些浪费,因为常规情况下的带储存数据经过算法处理后,并不会无间隔的紧密的按顺序放置在内存中,而是分散的。

    dict内部存放的顺序和key放入的顺序是完全没有关系的

    dict的key必须是不可变对象,因为dict内使用hash计算key存放的位置,如果每次计算相同的key得出的结果不同,就会造成key的混乱,如果用可变对象当作key,会报错

    >>> key = [1, 2, 3]
    >>> d[key] = 'a list'
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unhashable type: 'list'
    

    dict的一些方法和特性

    一个key只能对应一个value

    可以通过in判断是否存在(只匹配key,不匹配value)

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    >>> l={'a':'1','b':'2'}
    >>> 'a' in l    
    True            
    >>> '1' in l    
    False           
    

    还可以通过 get() 方法获取指定key的内容,若key不存在,返回None,或者返回自己指定的内容

    >>> l.get('a')
    '1'
    >>> l.get('1')#返回None
    >>> l.get('1',aaa)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'aaa' is not defined#因为必须写“aaa”
    >>> l.get('1',1111)
    1111
    >>>
    

    使用 pop(key) 方法删除指定的key值

    使用remove()删除list中的index

    使用dict一定要注意,dict的key一定是不可变对象,在Python中,字符串、整数等都是不可变的,而list是可变的。

    list与dict的区别:

    两者之间的区别主要在于查找速度和对储存的使用率上面

    1)list的查找速度会随着存放数据的数量的增加而增加,但占用的内存小,浪费内存还小。

    2)dict的查找速度极快,不会受存放数据数量大小的影响,但占用内存大,浪费空间多。

    set

    set 和dict类似,也是一组 key 的集合,但不储存 value ,同样的key不能重复。

    使用一个list作为输入创建set

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    >>> s=set([1,2,'a'])#注意创建时传入的参数是一个list
    >>> s
    {1, 2, 'a'}#这样显示并不代表set是有序的
    >>> s=set([1,2,'a','a'])
    >>> s
    {1, 2, 'a'} #不重复
    >>>
    

    使用 add(key) 添加 key 到 set 中

    >>> s.add('b')
    >>> s.add('a')#重复添加没有效果
    >>> s
    {1, 2, 'a', 'b'}
    

    使用 romove(key) 删除

    set 可以看作为数学意义上的一个集合,这个集合中的元素是无序的、是不重复的,可以做数学意义上的交集、并集操作。

    >>> b=set([3,4,'d'])
    >>> s&b#交集
    set()
    >>> b
    {'d', 3, 4}
    >>> s|b#并集
    {1, 2, 'a', 3, 4, 'b', 'd'}
    >>>
    

    不能添加可变元素,注意:tuple虽然是不可变元素,但是包含可变元素的tuble也不行

    >>> b.add([5,6])
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unhashable type: 'list'
    AttributeError: 'tuple' object has no attribute 'add'
    >>> b.add((1,2,[3,4]))#tuple中包含了可变元素list
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: unhashable type: 'list'
    >>>
    

    可变与不可变对象

    不可变对象就是虽然看起来对他的改变会生效,是因为其返回一个新的对象。如

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    >>> a = 'abc'
    >>> b = a.replace('a', 'A')
    >>> b
    'Abc'
    >>> a
    'abc'
    

    而可变对象如 list

    >>> l=[1,2]
    >>> l
    [1, 2]
    >>> l[0]='a'
    >>> l
    ['a', 2]
    >>>
    

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

    相关文章

      网友评论

        本文标题:python 基础-使用list(列表)、dict、set、可变

        本文链接:https://www.haomeiwen.com/subject/xpdugctx.html