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 内部“不会有重复元素”。

posted @ 2019-10-25 09:43  Albert-陌尘  阅读(781)  评论(0编辑  收藏  举报