• 【Python】Python中的数据结构


    Python中的数据结构

    这里总结一下Python中的内置数据结构(Built-in Data Structure):列表list、元组tuple、字典dict、集合set,涵盖的仅有部分重点,详细地去介绍每个知识点并未涉及。

    列表list

    list的显著特征

    • 列表中的每个元素都可变的

      意味着可以对每个元素进行修改和删除

    • 列表是有序的,每个元素的位置是确定的,可以用索引去访问每个元素

    • 列表中的元素可以是Python中的任何对象

      可以为任意对象就意味着元素可以是字符串、整数、元组、也可以是list等Python中的对象。

    >>> x = [1,2,3]
    >>> y = {'name':'Sakura'}
    >>> z="Test"
    >>> a=[x,y,z]
    >>> a
    [[1, 2, 3], {'name': 'Sakura'}, 'Test']
    

    觉得Python中的list和C语言中的数组蛮像的,只是list中的元素类型可以为Python中的任意对象,C中的数组只能是同种类型。当访问他们中的元素时,都可采用索引。这里需要注意的是,list不仅可以向数组那样正向索引也可以反向索引。

    list中的正反索引


       

    list中的增删查改

    list中有很多的方法,这里仅介绍对list中元素进行增删查改的方法。

    1. 利用insert()和分片将元素添加到指定位置 , 利用remove()和关键字del对
      元素进行删除

      需要注意分片[a:b]中的位置不包含位置b,利用[a,a]可以将元素添加至a位置

       

       

    1. 利用正反索引对元素进行查找

    2. 对元素修改可以直接赋值替换

    3. 列表中还有其他方法如pop()删除末尾元素,pop(i)删除指定位置i的元素,append()向末尾添加元素

    list函数

    可以通过list将序列创建为列表

    Python中包含6中內建的序列:列表,元组,字符串、Unicode字符串、buffer对象和xrange对象。

    >>> list("Hello,world")
    ['H', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'l', 'd']
    

    其实list为一种类型并非函数,但此处二者并无多大区别。下面的tuple、dict都如此。

    元组tuple

    1. 元组可以理解为一个固定的列表一旦初始化其中的元素便不可修改(认真理解这句话),只能对元素进行查询


    >>> test=(1,2,3)
    >>> test
    (1, 2, 3)
    >>> test[1]=4
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment
    >>> test[1:1] = 4
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment
    >>> test[1]
    2
    

      从上可知,tuple不支持对元素的修改(包括删除),tuple一初始化便固定下来了。




      再来看一个例子。

    >>> test=('a','b',['A','B'])
    >>> print(test)
    ('a', 'b', ['A', 'B'])
    >>> test[2][0]='x'
    >>> test[2][1]='y'
    >>> test
    ('a', 'b', ['x', 'y'])
    
    

      这里看似元素中的元素改变了,可是仔细分析下,元组中的第三个元素是一个列表。

      代码3.4行改变的是列表中的值,元组所指的这个元素列表并没有改变,需要注意这点!

      这就涉及到Python中的可变对象和不可变对象,像list这样的就是可变对象,tuple便是不可变对象。

    1. 元组是固定的列表,那么元组的意义何在呢?

      因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple
      并且需要注意元组中元素的可变性!!

    2. 空的tuple可以记为(),若只有一个元素的tuple记为(1,)

      因为记为(1)的话,这个实际代表的是数字1,此时()是数学公式中的小括号

    3. 因为元组是固定的列表,所以其内置的大多数的方法和列表是差不多的。

    4. 可以通过tuple将序列转换为元组,用法和list一样

    >>> tuple('Hello,world!')
    ('H', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'l', 'd', '!')
    

    字典dict

    字典这个概念就是基于现实生活中的字典原型,生活中的使用名称-内容对数据进行构建,Python中使用键(key)-值(value)存储,也就是C++中的map。

    dict的显著特征

    • 字典中的数据必须以键值对的形式出现

    • 键不可重复,值可重复

      键若重复字典中只会记该键对应的最后一个值

    • 字典中键(key)是不可变的,为不可变对象,不能进行修改;而值(value)是可以修改的,可以是任何对象
      在dict中是根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。

    dict的增删查改

    1. 可以采用“键值对”的方法和update()方法向字典中添加元素

      删除可以使用关键字del以及pop()方法

       

    1. 查询采用如查询列表元素的索引方式,使用键作为索引查找值

      若元素不存在会报错,在进行查找前,可以通过以下两种方法判断key是否存在:

      ① 成员资格运算符--in运算符

      ② get()方法(值不存在时返回NULL,也可指定返回的值)
    >>> test={'Mon':1}
    >>> 'Fri' in test
    False
    >>> test.get('Fri')
    >>> test.get('Fri',-1)
    -1
    
    1. 对值得修改可以采用直接覆盖原值的方法

    2. dict中的元素是无序的,不可以采用分片。

    dict函数

    可以使用dict,通过其他映射或者(键,值)对的序列建立字典。

    >>> test=[('name','Sakura'),('age',20)]
    >>> d = dict(test)
    >>> d
    {'name': 'Sakura', 'age': 20}
    

    dict也可以使用关键字参数创建字典,也可用映射作为dict参数,dict若不带任何参数,将返回一个空字典

    >>> d = dict(name='Sakura',age=20)
    >>> d
    {'name': 'Sakura', 'age': 20}
    >>> a=dict()
    >>> a
    {}
    

    集合set

    集合更接近数学上集合的概念。集合中每个元素都是无序的、不重复的任意对象。
    可以通过集合去判断数据的从属关系,也可以通过集合把数据结构中重复的元素减掉。集合可做集合运算,可添加和删除元素。

    集合的创建

    创建集合时需要用list作为输入集合,可通过add()方法增加元素,remove()方法删除元素

    >>> test=set([1,2,3])
    >>> test
    {1, 2, 3}
    >>> test.add(3)
    >>> test
    {1, 2, 3}
    >>> test.add(6)
    >>> test
    {1, 2, 3, 6}
    >>> test.remove(3)
    >>> test
    {1, 2, 6}
    

    集合中重复的元素会被过滤掉

    集合运算

    Python中的集合也可以进行集合的之间的交、并等运算

    >>> s1 = set([1,2])
    >>> s2=set([2,3])
    >>> s1 & s2  # s1与s2
    {2}
    >>> s1 | s2  # s1与s2进行或运算
    {1, 2, 3}
    
  • 相关阅读:
    Oracle忘记用户名和密码以及管理员用户新增修改删除用户
    Oracle11.2安装和完全卸载及卸载后重装等问题
    软件测试之路2
    软件测试之路1
    Git入门笔记
    CentOS 6.5下二进制安装 MySQL 5.6
    十款压力测试工具
    tomcat 内存设置
    tomcat 安全
    tomcat 模式详解
  • 原文地址:https://www.cnblogs.com/myworld7/p/8449614.html
Copyright © 2020-2023  润新知