zoukankan      html  css  js  c++  java
  • Python常用的数据结构详解

    数据结构:通俗点说,就是储存大量数据的容器。这里主要介绍Python的4种基本数据结构:列表、字典、元组、集合。

    格式如下:

    列表:list = [val1,val2,val3,val4],用中括号;
    字典:dict = {key1:val1,key2:val2},大括号,且每个元素是带有冒号的key与val的对应关系组;
    元组:tuple = (val1,val2,val3,val4),小括号;
    集合:set = {val1,val2,val3,val4},大括号。

    1. 列表:

    list = [val1,val2,val3,val4]

    列表最显著的特征是:

    列表中每个元素都是可变的;
    列表中的元素都是有序的,即每个元素都有一个位置;
    列表可以容纳Python中的任何对象。
    接下来看下列表的增删改查。

    增:

    1
    2
    3
    1 list = [1,'dwd',3.6]
    2 list.insert(0,'Python')
    3 print(list)

    用insert方法可以实现在列表中增加元素。insert方法需要写明增加在哪个位置和增加的内容,新增元素的实际位置是在指定位置元素之前的位置;如果指定的位置不存在,默认会增加在列表末尾。

    1
    2
    3
    4
    5
    6
    1 list = [1,'dwd',3.6]
    2 list[0:0] = [9]
    3 # 【0:0】是指在list中的第1个位置插入新元素
    4 list[3:3] = ['a']
    5 # 【3:3】是指在list中的第4个位置插入新元素
    6 print(list)

    上面说到的这两种方法都是添加单个元素,除了添加单个元素外,还可以添加多个元素,用extend方法来实现。

    1
    2
    3
    4
    5
    1 list_a = [1,'dwd',3.6]
    2 list_b = ['Python',56,'game']
    3 list_a.extend(list_b)
    4 # extend方法用于在列表末尾一次性追加另一个列表中的多个值
    5 print(list_a)

     删:

    1
    2
    3
    1 list = [1,'dwd',3.6]
    2 list.remove('dwd')
    3 print(list)

     删除列表中的元素除了用上面的remove方法来实现外,也可以用del关键字来声明:

    1
    2
    3
    4
    1 list = [1,'dwd',3.6]
    2 del list[0:2]
    3 # 【0:2】是删除第1和第2个位置的元素
    4 print(list)

    改:

    1
    2
    3
    4
    1 list = [1,'dwd',3.6]
    2 list[2] = 7
    3 list[0] = 'start'
    4 print(list)

    如果想要替换掉列表中的某个元素,可以直接给列表某位置的元素重新赋值,list[2]指list列表中的第3个元素。

    查:

    列表的索引与之前文章《Python入门_浅谈字符串的分片与索引、字符串的方法》中提到的字符串的索引类似,同样是分正反两种索引方式,可以从前往后,也可以从后往前索引。比如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    list = [1,'dwd',3.6]
    print(list[1])
    # 打印第2个位置的元素
    print(list[-1])
    # 打印倒数第一个位置的元素
    print(list[:2])
    # 打印第1和第2个元素
    print(list[1:])
    # 打印第2到最后一个的元素

    但如果想查看某个元素的位置,就不适合用这种方式,程序会报错。因为列表只接受用位置进行索引,不可以通过元素来查找位置。

    2. 字典:

    dict = {key1:val1,key2:val2}

    编程世界中的很多概念都源自于生活,字典也是。这种数据结构如我们使用的字典一样,通过“名称—内容”来构建,在Python中每个元素是带有冒号的key与val的对应关系组,习惯称之为键值对。

    字典的特征如下:

    字典中的元素必须是键值对的形式;

    键(key)不可以重复,而值(val)可以重复;

    键不可变,无法修改;值可修改,可以是任何对象。

    即使字典中有重复的键,打印出来时也只会出现一次。比如:

    1
    2
    1 dict = {'A':'art','B':'big','C':'cute','C':'cute'}
    2 print(dict)

    接下来看下字典的增删改查。

    增:

    字典中没有像列表那样有一个现成的insert方法可以使用,但可以通过下面这种方式插入元素,元素默认会插入在最后一个位置。

    1
    2
    3
    1 dict = {'A':'art','B':'big','C':'cute'}
    2 dict['D'] = 'dictionary'
    3 print(dict)

    上面讲到在列表中增加多个元素时可以使用extend方法来实现,在字典中也有对应的update方法来实现添加多个元素。

    1
    2
    3
    1 dict = {'A':'art','B':'big','C':'cute'}
    2 dict.update({'D':'dictionary','E':'exam'})
    3 print(dict)

    删:

    在字典中删除某元素,也可以使用del关键字。

    1
    2
    3
    1 dict = {'A':'art','B':'big','C':'cute'}
    2 del dict['B']
    3 print(dict)

    需要注意的是,虽然字典是用大括号的,但在删除时依然使用的是中括号。

    改:

    如果要修改字典里的元素,直接重新给键赋值即可。

    1
    2
    3
    1 dict = {'A':'art','B':'big','C':'cute'}
    2 dict['B'] = 'beyond'
    3 print(dict)

    查:

    在字典中进行索引时,和删除一样,用的是中括号,中括号中存放字典的键,也就是说对字典元素进行索引时是通过键来索引的。

    1
    2
    3
    1 dict = {'A':'art','B':'big','C':'cute'}
    2 dict['B']
    3 print(dict['B'])

    之前在文章《Python入门_浅谈字符串的分片与索引、字符串的方法》中有提到过字符串的分片,在字典里,字符串是不可以进行分片的。

    3. 元组

    tuple = (val1,val2,val3,val4)

    Python中的元组与列表类似,不同之处在于元组不可以修改,类似于稳固版的列表,因此在列表中可以使用的增删改的方法在元组中是不可以使用的,但是可以对元组中的元素进行索引,和列表类似。

    1
    2
    3
    4
    5
    1 tup = (1,2,'s',7)
    2 print(tup[0])
    3 print(tup[-1])
    4 print(tup[1:])
    5 print(tup[:-2])

    4. 集合

    set = {val1,val2,val3,val4}

    集合的概念有点接近于数学上的集合。每个集合中的元素是无序的、不重复的任何对象,我们可以通过集合去判断数据的从属关系,有时还可以通过集合把数据结构中重复的元素减掉。

    集合不可以被切片也不能被索引,除了做集合运算之外,集合元素可以被添加和删除。

    1
    2
    3
    4
    5
    6
    7
    set = {7,1,8,3,4,5,3}
    set.add(0)
    # 新增元素0
    set.discard(7)
    # 删除掉元素7
    print(set)
    # 打印出的集合会从小到达排列,并去重

    等后面如果用到集合时,再详细展开集合的运算。

    后续会介绍下数据结构的一些小技巧。

    操作环境:Python版本,3.6;PyCharm版本,2016.2;电脑:Mac

  • 相关阅读:
    Kubernetes 无法删除pod实例的排查过程
    kubeadm 生成的token过期后,集群增加节点
    linux 常规操作EOF写法梳理
    linux下EOF写法梳理
    容器云之弹性伸缩
    QEMU,KVM及QEMU-KVM介绍
    听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构
    代码内存泄露检测(1) MLeaksFinder (Wechat开源) + FBRetainCycleDetector (FaceBook开源)
    Xcode 创建使用多个 target (1)
    iOS 多线程的简单理解(4) 线程锁的简单使用
  • 原文地址:https://www.cnblogs.com/Dinging006/p/9516702.html
Copyright © 2011-2022 走看看