python3常用的内置数据结构

针对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))

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容