美文网首页
python3常用的内置数据结构

python3常用的内置数据结构

作者: StephenZhang01 | 来源:发表于2018-08-19 20:35 被阅读0次

    针对python3的内置数据结构,做了个小结,包括概念、内置方法、示例等内容。

    python3的内置数据结构总体分类:

    可变对象:

            序列类型:列表(list)、字节数组(bytearray)

            key-value映射类型:字典(dict)

            集合类型:集合(set)

    不可变对象:

            数值类型:整数(int)、浮点数(float)、复数(j)

            序列类型:元组(tuple)、字节(bytes)

            其中数值类型、序列类型为线性结构,其在内存中的地址空间是连续分布的。剩下的映射类型、集合类型则是非线性结构。


    序列类型:

    列表(list):

    特点:

            列表具有有序、可索引、可修改、可迭代的特点。列表一旦定义其内存中地址分布是连续的。通过索引的偏移量可以较快速的查找到对应的元素。但列表也具有一些缺点,比如列表的数据规模很大情况下,其内置方法(比如remove、insert等)将影响到元素之后的索引位置的调整,其时间复杂度为O(n)。

            列表中可以嵌套其他类型数据,比如列表、字典、集合等,但需要注意的是在嵌套复杂类型时,其只是引用对象,做列表复制时需要注意。


    定义方式:

            定义空列表并赋予给标识符l1

    l1 = list()

            注意:l1 = list()与l1 = []的区别

    如:list(range(10))与[range(10)]

            从可迭代对象中元素,初始化一个新列表

    l1 = list("hello")

    l1 = list(range(10))

    l1 = list(b"hello")

    list常用内置方法:

    1)append

            作用:从列表末尾添加新元素,就地修改原来的列表并返回None。

    例:

    l1 = list(b"hello")

    l1.append("a")

    2)copy

            作用:对一个列表进行浅复制

    例:

    l2 = l1.copy()

    3)pop

            作用:默认无索引参数情况,则从尾部移除一个元素,并返回该元素。可以指定参数为某个索引值,则删除该索引对应的元素。如果超出索引范围,则会抛出IndexError异常。

    例:

    l1.pop()

    l1.pop(2)

    4)remove

            作用:从列表中移除某元素,就地修改列表并返回None。

    例:

    l1.remove("a")

    5)reverse

            作用:将列表中的元素进行反序。就地修改列表并返回None。

    例:

    l1.reverse()

    6)sort

            作用:将列表中的元素进行排序,默认为升序。就地修改列表并返回None。

    例:

    l1.sort()

    7)insert

            作用:在某个索引位置插入某个元素

    例:

    l1.insert(0, "a")

    8)count

            作用:统计某元素在列表中出现的次数,并返回次数。

    例:

    l1.count("a")

    9)extent

            作用:对现有列表进行扩展,就地修改原来的列表并返回None。

    例:

    l1.extend(l2)

    字符串(str)

    特点:

            字符串具有有序、可索引、不可修改、可迭代的特点。

    定义方式:

    s1 = "hello"

    str的内置常用方法:

    1)partition

            作用:以匹配到的第一个分隔符,将字符串分割成三部分(头、分隔符、尾)并返回一个元组。

    例:

    s2 = s1.partition("l")

    2)split

            作用:如果没有参数,则默认以空格为分隔符分割,并返回一个列表。若指定分隔符,则会匹配到所有分隔符并分割。

    例:

    s1 = "hello world"

    s2 = s1.split()

    3)strip

            作用:默认从两端去除空格、\t、\r、\n等转义字符。可指定去除字符元素。最后返回一个字符串副本。

    例:

    s1 = "\thello hello\n"

    s1.strip()

    4)rjust, ljust, center

            作用:对字符串进行对齐(右对齐,左对齐,居中),位置参数:总字符长度。默认参数:(可选)默认为空格,可以指定填充字符。

    例:

    s2 = s1.rjust(20, "+")

    s2 = s1.ljust(20, "+")

    s2 = s1.center(20, "+")

    5)encode

            作用:将字符串以指定格式进行编码并返回相应的字节码。默认为utf-8编码。

    例:

    s2 = s1.encode()

    6)isalpha、isalnum、isdigit、isdecimal、isnumeric

            作用:判断字符串的组成,并返回布尔值。

    7)replace

            作用:替换指定元素,并返回一个新字符串

    例:

    s3 = a.replace("o", "0")

    元组(tuple)

    特点:

            元组具有有序、不可修改、可索引、可迭代的特点。

    定义方式:

    t1 = (1, 2, 3, 4)

    l1 = ["a", "b"]

    t1 = tuple(l1)

    字节码(bytes、bytearray)

    特点:

            在python3中,字节码从字符串中独立出来。字节码在内存中是以一系列0与1组成。

            bytes:具有有序、不可修改、可迭代的特点

            bytearray:具有有序、可修改、可迭代的特点

    定义方法:

    bytes:

    # 初始化一个指定大小的空字节码

    b1 = bytes(int)

    # 将str转化为bytes类型,并编码

    b1 = bytes("hello", encoding="utf-8")

    # 根据可迭代整数数列来定义bytes

    b1 = bytes(range(10))

    # 生成一个不可变的bytes副本

    b2 = bytearray("hello", encoding="utf-8")

    b1 = bytes(b2)

    bytearray:

            与bytes不同,bytearray定义一个可变字节序列。定义方法与bytes类似。

    bytes、bytearra的内置常用方法:

    bytes方法与str类似

    bytearray方法与list类似

    1)hex

    作用:从bytes对象中创建一个16进制数的字符串。

    例:

    b3 = bytes.hex(b"abc ABC")

    b"abc ABC".hex()

    2)fromhex

    作用:从16进制数组成的字符串中创建bytes。

    例:

    b1.fromhex("a0c2")

    kv映射类型:

    字典(dict)

    特点:

            字典具有无序、key唯一(去重)、可变、可迭代、非线性结构的特点。此外,字典的key是由可hash的元素组成(不可变对象),因此,key经过散列后,通过key进行查询其value值的速度是非常快的。查询的时间复杂度是O(1)。

    定义方法:

    d1 = {}

    d1 = dict()

    dict内置常用方法:

    1)fromkey

            作用:从可迭代对象中生成新字典的key,默认value为None(可自定义value值)。

    例:

    s1 = "hello"

    d2 = d1.fromkeys(s1, 0)

    2)get

            作用:获取key对应的值,若没有找到key,则默认返回None。可以自定义返回值。

    例:

    d1 = {1: "a"}

    d2.get("b", -1)

    3)setdefault

            作用:判断key是否存在,如果存在则返回对应的value值。如果不存在则新增key与value,默认value为None,可以自行设置默认value值。

    例:

    d1 = {1: "a"}

    d1.setdefault(2, "b")

    4)items

            作用:返回一个包含字典key-value元素的视图(类集合对象)

    例:

    d1.items()

    5)keys

            作用:返回一个包含字典keys的视图(类集合对象)

    例:

    d1.keys()

    6)values

            作用:返回一个包含字典values的视图

    例:

    d1.values()

    7)pop

            作用:移除指定key并返回其对应值,若key不错在则抛出KeyError异常。

    例:

    d1.pop(1)

    8)popitem

            作用:从尾部弹出kv对,并返回kv组成的元组。

    例:

    d1.popitem()

    9)update

            作用:对原有的字典进行更新,若新增key与原key相同则会去重且新key对应的value覆盖原key的value。若新增key与原key不重复则字典会新增key-value对。

    例:

    d1 = {1: 'a', 2: 'b', 3: None}

    d1.update({3: "c"})

    d1.update({4: "d"})

    d1.update({(5, "e"), (6, "f")})

    集合类型

    集合(set)

    特点:

            集合具有无序、不重复(去重)、可迭代、可变、非线性结构的特点。集合中的元素均为不可变且可hash的对象(frostset除外),集合查询某元素的时间复杂度为O(1)。

    定义方法:

    s1 = set()

    s1 = {1, 2, 3, 4}

    set内置方法:

    1)add

            作用:向集合中添加元素

    例:

    s1 = set()

    s1.add(1)

    2)union

            作用:将两个集合合并,并返回新的集合

    例:

    s1 = {5}

    s2 = {1, 2, 3, 4}

    s3 = s1.union(s2)

    3)update

            作用:对原有集合进行更新,返回None。

    例:

    s1.update(s2)

    4)pop

            作用:从集合中弹出一个元素,返回元素值。若集合为空,则抛出KeyError异常

    例:

    s1.pop()

    5)remove

            作用:从集合中删除指定元素。若元素不存在,则抛出KeyError异常。

    例:

    s1.remove(1)

    6)discard

            作用:从集合中删除指定元素。若元素不存在,则不提示。

    例:

    s1.discard(3)

    7)difference(-)

            作用:差集。返回该集合与其他集合不同的元素

    例:

    s1 = {3, 4, 5, 6}

    s2 = {1, 2, 3, 4}

    s3 = {6, 7, 8, 9}

    print(s1.difference(s2, s3))

    print(s1 - s2 - s3)

    8)intersection(&)

            作用:交集。返回所有集合中共有的元素

    例:

    print(s1 & s2)

    print(s1.intersection(s2))

    9)symmetric_difference(^)

            作用:对称差。返回所有非交集的元素

    例:

    s1 = {3, 4, 5, 6}

    s2 = {1, 2, 3, 4}

    s3 = {6, 7, 8, 9}

    print(s1 ^ s2 ^ s3)

    print(s1.symmetric_difference(s2).symmetric_difference(s3))

    10)isdisjoint

            作用:判断如果两个集合没有交集,则返回True

    例:

    print(s1.isdisjoint(s2))

    11)issubset

            作用:判断是否为子集

    例:

    s1 = {3, 4, 5, 6}

    s4 = {3, 4}

    print(s4.issubset(s1))

    12)issuperset

            作用:判断是否为超集

    例:

    s1 = {3, 4, 5, 6}

    s4 = {3, 4}

    print(s1.issuperset(s4))

    相关文章

      网友评论

          本文标题:python3常用的内置数据结构

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