• 05-Python中的四种数据类型


      概述:本文主要分析 Python 中的四种数据类型:list、tuple、dict、set


    一、list

      list 是一种有序列表,我们可以随时增删 list 中的元素。

      list 的元素用中括号 [] 括起来,例如:

    >>> coding = ['C', 'Java', 'PHP']
    >>> coding
    ['C', 'Java', 'PHP']

    len():获取元素个数

      我们可以用 len() 函数来获取 list 中的元素个数:

    >>> len(coding)
    3

    通过索引访问元素

      list 和 C 语言中的数组一样,索引都从 0 开始。我们可以通过索引来访问 list 中的元素。当索引超出范围时,Python 会报 IndexError 错误。

      我们有两种方式获取最后一个元素:

      • len(coding) - 1
      • len(-1)

      以此类推,list 的下标可以由 0 反推,-1、-2 以此类推。

    append():追加元素

      可以通过 append() 向 list 末尾追加元素:

    >>> coding.append('Python')
    >>> coding
    ['C', 'Java', 'PHP', 'Python']

    insert():插入元素到指定位置

      可以将元素插入到 list 的指定位置,原有元素依次后移:

    >>> coding.insert(1, 'C++')
    >>> coding
    ['C', 'C++', 'Java', 'PHP', 'Python']

    pop():删除元素

      可以用 pop() 函数删除 list 末尾的元素:

    >>> coding.pop()
    'Python'
    >>> coding
    ['C', 'C++', 'Java', 'PHP']

      通过指定索引,可以用 pop() 删除指定位置的函数

    >>> coding.pop(1)
    'C++'
    >>> coding
    ['C', 'Java', 'PHP']

    替换某个元素:直接赋值

      可以直接给指定索引的元素赋值,来替换该元素。

    list 很灵活:无类型限定

      list 中的元素可以是不同数据类型,甚至可以是另一个 list。

    二、tuple

      tuple 也是一种有序列表,称作元组,和 list 很相近。tuple 的特殊之处在于:一旦初始化就不能修改。自然地,tuple 不会有 append()、pop()、insert() 等方法。

    不变带来的好处:安全

      因为不可变,所以更安全。如果可能,应尽量用 tuple 代替 list。

    定义 tuple 有巨坑

      因为 tuple 不可变,所以定义 tuple 时,元素就要确定下来。

      定义一个空的 tuple:

    t = ()

      定义只有 1 个元素的 tuple(前方神坑预警,非战斗人员撤离!!!):

    t = (1) # 这种方式定义的不是 tuple,而是 1 这个数
    t = (1, ) # 这样定义的才是只有一个元素的 tuple

      敲黑板,划重点:定义只有一个元素的 tuple 时,务必加个逗号。

    tuple 之变与不变

      tuple 的不变,说的是指向的地址不变。至于指向地址中的内容是否变化,tuple 表示无力管辖。

      举个栗子:tuple 中有个元素是 list,tuple 所说的不变,是始终指向这个 list,不能转而指向其他 list。至于这个 list 中的元素是否变化,就不是 tuple 考虑的事情啦。

    三、dict

       dict 即为字典,类似其他语言中的 map。dict 使用键值对(key-value)存储,查找速度极快。请注意:dict 内部存放顺序和 key 的存入顺序无关。

      例如,用 dict 实现工资表并查询:

    >>> d = {'Albert': 11000, 'Chin': 5500, 'Chris': 12000}
    >>> d['Albert']
    10000

    快是如何练成的

      为什么 dict 查找速度快?因为 dict 不是按索引查找,而是使用哈希算法(Hash)根据 key 算出 value 的内存地址,直接去对应的内存取出数据。同理,在向 dict 中加入新的 key-value 对时,也要根据 key 来计算出 value 的地址。由于要根据 key 计算 value 的位置,所以 key 必须是不可变的。

    如何将数据放入 dict

      方法一:初始化时指定;

      方法二:通过 key 放入。例如我们给 Albert 同学涨薪:

    >>> d['Albert'] = 15000
    >>> d['Albert']
    15000

      由于key 和 value 是一一对应的,所以向某个 key 赋新值,会将原来的 value 覆盖掉。

      如果 key 不存在,dict 会报错。避免这种错误的方法有两种:

    • 通过 in 来判断 key 是否存在: ‘Thomas’ in d 
    • 通过 dict 提供的 get() 方法。如果 key 不存在,则返回 None 或自己指定的 value: d.get('Thomas') 或 d.get('Thomas', -1) 

    如何删除一个 key

      要删除一个 key,可以用 pop(key) 方法。

    list 与 dict 孰美?

      和list比较,dict有以下几个特点:

    • 查找和插入的速度极快,不会随着key的增加而变慢;
    • 需要占用大量的内存,内存浪费多。

      而list相反:

    • 查找和插入的时间随着元素的增加而增加;
    • 占用空间小,浪费内存很少。

      所以,dict是用空间来换取时间的一种方法。

    四、set

      set 也是一组 key 的集合,但不存储 value。key 不能重复,set 中没有重复的 key。

    如何创建 set

      要创建一个 set,需要提供一个 list 作为输入集合:

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

      虽然我们传入的 list 是有序的,但 set 中只是有这些元素,并无排序。

      set 会自动将重复的 key 过滤掉:

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

    如何将元素添加到 set 中

      可以用 add(key) 方法将元素添加到 set 中。如果重复添加同一个元素,不会报错,只是没有效果。

    如何删除 set 中的元素

      通过 remove(key) 方法可以删除元素:

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

    查漏补缺

      set 就像数学上的集合,也可以做交集、并集等操作:

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

      set 和 dict 的原理一样,也不能放入可变对象。如果无法判断两个可变对象是否相等,自然也不能保证 set 内部“不会有重复元素”。

  • 相关阅读:
    C++中使用stringstream进行类型转换操作
    代理模式
    观察者模式 VS 责任链模式
    10.模板方法模式
    2.里氏替换原则
    单一职责原则
    规格模式
    策略模式的扩展——策略枚举
    策略模式 VS 桥梁模式
    原型模式【下】
  • 原文地址:https://www.cnblogs.com/murongmochen/p/11674778.html
Copyright © 2020-2023  润新知