Python基础之数据结构详解

一、列表

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来

示例:
list01 = ['a','b','c']

1.1 列表更新元素

一个列表是可以储存不同的类型的数据结构,并且修改的新元素也不一定需要和原来的元素类型一致,但是要注意的是,更新列表的索引必须是已存在的索引,不能对超出列表的索引更新元素

1.2 列表增加元素

增加元素的方法:

1.append方法:在列表的最后增加一个元素。

list01 = ['a', 'b', 'c']
list01 .append('d')
print(list01)
list01 .append(['e', 'f'])
print(list01)
执行结果:
['a', 'b', 'c', 'd']
['a', 'b', 'c', 'd', ['e', 'f']]

2.extend方法:在列表的最后增加多个元素。

list01 = ['a', 'b', 'c']
list01 .extend(['d', 'e', 'f'])
print(list01)
执行结果:
['a', 'b', 'c', 'd', 'e', 'f']

3.insert方法:在列表的中间插入一个元素。

list01 = ['a', 'b', 'c']
list01 .insert(1,'d')
print(list01)
执行结果:
['a', 'd', 'b', 'c']

1.3 列表删除元素

删除元素的方法:

1.pop方法:pop(index)可以删除指定位置的元素,并且把这个元素作为返回值返回,如果不指定位置则默认选择最后一个元素。

list01 = ['a', 'b', 'c']
list01 .pop()
print(list01)
list01 .pop(0)
print(list01)
执行结果:
['a', 'b']
['b']

2.remove方法:可以根据元素内容对元素进行删除。

list01 = ['a', 'b', 'c']
list01.remove('a')
print(list01)
执行结果:
['b', 'c']

3.del方法:还可以使用关键字“del”根据索引删除列表的元素。

list01 = ['a', 'b', 'c']
print(list01)
del list01 [0]
print(list01)
执行结果:
['a', 'b', 'c']
['b', 'c']

1.4 列表的其他操作

1.index方法:查找元素在列表中的索引位置。

list01 = ['a', 'b', 'c']
print(list01 .index('a'))
print(list01 .index('b'))
执行结果:
0
1

2.reverse方法:反转队列,反转原来的队列,并且没有返回值。

list01 = ['a', 'b', 'c']
list01 .reverse()
print(list01)
执行结果:
['c', 'b', 'a']

3.count方法:统计某个元素在列表中的次数。

list01 = ['a', 'b', 'c','b', 'c']
print(list01 .count('a'))
print(list01 .count('b'))
执行结果:
1
2

4.sort方法:队列表进行排序,还可以自定义排序方式。

list02 = [1,88,66,22]
list02.sort()
print(list02)
执行结果:
[1, 22, 66, 88]

二、元组

创建一个元组,只要把逗号分隔的不同的数据项使用小括号括起来
如果元组中只有一个元素,还需要元素后加上“,”,才能定义一个元组

tuple01 = ('a','b','c')

2.1 删除元组

由于元组是不能修改的,所以元组也不能单独删除,只能删除整个元组

1.del方法:删除整个元组

tuple01 = ('a','b','c')
del tuple01
print(tuple01)
执行结果:
发生异常: NameError
name 'tuple01' is not defined
发生异常是正确的,说明tuple01 已经被删除了

2.2 元组的其他操作

1.count方法:用于统计元素在元组中出现的次数

tuple02 = ('a', 'b', 'c','b', 'c')
print(tuple02.count('a'))
print(tuple02.count('b'))
执行结果:
1
2

2.index方法:用于查找元素在元组中的索引位置

tuple02 = ('a', 'b', 'c','b', 'c')
print(tuple02.index('a'))
print(tuple02.index('b'))
执行结果:
0
1

3.len方法:计算元组元素个数

tuple02 = ('a', 'b', 'c','b', 'c')
print(len(tuple02))
执行结果:
5

4.max,min方法返回元组中最大,最小的值

tuple02 = (1, 88, 66, 22)
print(max(tuple02))
print(min(tuple02))
执行结果:
88
1

三、字典

字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中。

dict01 = {'a':'深圳','b':22,'c':22.22}

3.1 字典删除元素

1.del方法:使用关键字“del”根据键删除列表的元素

dict01 = {'a':'深圳','b':22,'c':22.22}
print(dict01)
del dict01['a']
print(dict01)
执行结果:
{'a': '深圳', 'b': 22, 'c': 22.22}
{'b': 22, 'c': 22.22}

3.2 字典的其他操作

1.clear方法:用于清空字典里的所有元素,使字典变为空字典。

dict01 = {'a':'深圳','b':22,'c':22.22}
print(dict01)
dict01.clear()
print(dict01)
执行结果:
{'a': '深圳', 'b': 22, 'c': 22.22}
{}

2.copy方法:返回一个具有相同键值对的新字典。

dict01 = {'a':'深圳','b':22,'c':22.22}
print(dict01)
dict01.copy()
print(dict01)
执行结果:
{'a': '深圳', 'b': 22, 'c': 22.22}
{'a': '深圳', 'b': 22, 'c': 22.22}

3.fromkeys方法:用于创建一个新字典,用序列中的元素作为字典的键,第二个参数为字典所有参数对应的初始值。

tuple01 = ("name","age","city")
hunan1 = dict.fromkeys(tuple01)
human2 = dict.fromkeys(tuple01,20)
print(hunan1)
print(human2)
执行结果:
{'name': None, 'age': None, 'city': None}
{'name': 20, 'age': 20, 'city': 20}

4.get方法:返回键对应的值,如果字典不存在对应的键则返回none

dict01 = {'a': '深圳', 'b': 22, 'c': 22.22}
print(dict01.get('a'))
print(dict01.get('d'))
执行结果:
深圳
None

5.keys方法:返回一个列表,里面包含了字典里的所有键

dict01 = {'a': '深圳', 'b': 22, 'c': 22.22}
print(dict01.keys())
执行结果:
dict_keys(['a', 'b', 'c'])

6.valuse方法:返回一个列表,里面包含了字典的所有值

dict01 = {'a': '深圳', 'b': 22, 'c': 22.22}
print(dict01.values())
执行结果:
dict_values(['深圳', 22, 22.22])

7.items方法:返回一个列表,里面包含了所有键值对的列表

dict01 = {'a': '深圳', 'b': 22, 'c': 22.22}
print(dict01.items())
执行结果:
dict_items([('a', '深圳'), ('b', 22), ('c', 22.22)])

还可以使用items方法来遍历字典

dict01 = {'a': '深圳', 'b': 22, 'c': 22.22}
for k, v in dict01.items():
    print(k,v)
执行结果:
a 深圳
b 22
c 22.22

四、集合

集合(set)是一个无序的不重复元素序列。可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

set01 = {1, 2, 2, 2, 2, 3, }
print(set01)
set02 = {1, 2, 3, }
print(set02)
执行结果:
{1, 2, 3}
{1, 2, 3}

4.1 集合添加元素

1.add方法:为集合添加一个元素

set01 = {1, 2, 3}
set01.add(4)
set01.add(3)
print(set01)
执行结果:
{1, 2, 3, 4}

4.2 集合删除元素

1.remove方法:为集合删除一个元素

set01 = {1, 2, 3}
set01.remove(1)
print(set01)
执行结果:
{2, 3}

五、其他操作

1.clear()	移除集合中的所有元素
	2.copy()	拷贝一个集合
	3.difference()	返回多个集合的差集
	4.difference_update()	移除集合中的元素,该元素在指定的集合也存在。
	5.discard()	删除集合中指定的元素
	6.intersection()	返回集合的交集
	7.intersection_update()	返回集合的交集。
	8.isdisjoint()	判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
	9.issubset()	判断指定集合是否为该方法参数集合的子集。
	10.issuperset()	判断该方法的参数集合是否为指定集合的子集
	11.pop()	随机移除元素
	12.symmetric_difference()	返回两个集合中不重复的元素集合。
	13.symmetric_difference_update()	移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集
	14.合中不同的元素插入到当前集合中。
	15.union()	返回两个集合的并集
	16.update()	给集合添加元素

到此这篇关于Python基础之数据结构详解的文章就介绍到这了,更多相关python数据结构详解内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python描述数据结构学习之哈夫曼树篇

    前言 本篇章主要介绍哈夫曼树及哈夫曼编码,包括哈夫曼树的一些基本概念.构造.代码实现以及哈夫曼编码,并用Python实现. 1. 基本概念 哈夫曼树(Huffman(Huffman(Huffman Tree)Tree)Tree),又称为最优二叉树,指的是带权路径长度最小的二叉树.树的带权路径常记作: 其中,nnn为树中叶子结点的数目,wkw_kwk​为第kkk个叶子结点的权值,lkl_klk​为第kkk个叶子结点与根结点的路径长度. 带权路径长度是带权结点和根结点之间的路径长度与该结点的权值的乘

  • Python 实现数据结构-循环队列的操作方法

    今天我们来到了循环队列这一节,之前的文章中,我介绍过了用python自带的列表来实现队列,这是最简单的实现方法. 但是,我们都知道,在列表中删除第一个元素和删除最后一个元素花费的时间代价是不一样的,删除列表的第一个元素,那么在它之后的所有元素都要进行移动.所以当列表特别长的时候,这个代价就比较明显了.我们本文介绍的循环队列可以避免这个问题,同样我们上篇文章提到的用链表实现的方法也可以避免. 下面,我们来介绍循环队列. 循坏队列 循环队列,就是将普通的队列首尾连接起来, 形成一个环状,并分别设置首

  • 基于python实现模拟数据结构模型

    模拟栈 Stack() 创建一个空的新栈. 它不需要参数,并返回一个空栈. push(item)将一个新项添加到栈的顶部.它需要 item 做参数并不返回任何内容. pop() 从栈中删除顶部项.它不需要参数并返回 item .栈被修改. peek() 从栈返回顶部项,但不会删除它.不需要参数. 不修改栈. isEmpty() 测试栈是否为空.不需要参数,并返回布尔值. size() 返回栈中的 item 数量.不需要参数,并返回一个整数. class Stack(): def __init__

  • 基于Python数据结构之递归与回溯搜索

    目录 1. 递归函数与回溯深搜的基础知识 2. 求子集 (LeetCode 78) 3. 求子集2 (LeetCode 90) 4. 组合数之和(LeetCode 39,40) 5. 生成括号(LeetCode 22) 6. N皇后(LeetCode 51,52) 7. 火柴棍摆正方形(LeetCode 473) 1. 递归函数与回溯深搜的基础知识 递归是指在函数内部调用自身本身的方法.能采用递归描述的算法通常有这样的特征:为求解规模为N的问题,设法将它分解成规模较小的问题,然后从这些小问题的解

  • python实现数据结构中双向循环链表操作的示例

    看此博客之前建议先看看B站的视频python数据结构与算法系列课程,该课程中未实现双向循环链表的操作,所以我按照该视频的链表思路实现了双向循环链表的操作,欢迎大家阅读与交流,如有侵权,请联系博主! 下面附上代码: class Node: def __init__(self, elem): self.elem = elem self.prev = None self.next = None class DoubleCycleLinkList: def __init__(self, node=Non

  • 浅析Python语言自带的数据结构有哪些

    Python作为一种脚本语言,其要求强制缩进,使其易读.美观,它的数据类型可以实现自动转换,而不需要像C.Java那样给变量定义数据类型,使其编写非常方便简单,所以广受大家的欢迎. 现如今,Python已经广泛的应用于数据分析.数据挖掘.机器学习等众多科学计算领域.所以既然涉及到科学计算,深入了解Python原生提供的数据结构是很有必要的,这样才能在数据的海洋中游刃有余.得心应手.本文便以此展开,做一个归纳整理,方便收藏. Python 一.序列结构 首先介绍的数据结构是序列结构,所谓序列,也就

  • python中常用的数据结构介绍

    栈 # 使用List作为栈 stack = [3, 4, 5] # 入栈 stack.append(6) # 出栈 val = stack.pop() # 栈定元素 val = stack[-1] 队列 队列是FIFO, 但是List对于First Out效率不够高.通常用双端队列Deque来实现队列 Deque的特点是,两端添加和删除都是O(1)的时间复杂度 from collections import deque queue = deque(["Eric", "John

  • 4种非常实用的python内置数据结构

    array Python不仅仅可以使用内置的list实现数组,还支持像C语言那样的指定类型的原生数组array. 很显然,因为list可以存储各种类型的对象,而array只存储一个指定的原生类型,所以当数据量较大时,原生array在内存占用方面要比list小. 而且array不像C语言里那样在定义时就限制了大小,它支持list所支持的各种常用函数.相比之下Python的array更像是C++的vector. from array import array l = list(range(100))

  • Python 实现数据结构-堆栈和队列的操作方法

    队.栈和链表一样,在数据结构中非常基础一种数据结构,同样他们也有各种各样.五花八门的变形和实现方式.但不管他们形式上怎么变,队和栈都有其不变的最基本的特征,我们今天就从最基本,最简单的实现来看看队列和堆栈. 不管什么形式的队列,它总有的一个共同的特点就是"先进先出".怎么理解呢?就像是超市排队结账,先排队的人排在队的前面,先结账出队.这是队列的特征. 而堆栈则和队列相反,它是"先进后出",怎么理解呢?基本所有的编辑器都有一个撤销功能,就是按Ctrl+Z.当你写了一段

  • 浅谈Python描述数据结构之KMP篇

    前言   本篇章主要介绍串的KMP模式匹配算法及其改进,并用Python实现KMP算法. 1. BF算法   BF算法,即Bruce−ForceBruce-ForceBruce−Force算法,又称暴力匹配算法.其思想就是将主串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符:若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果.   假设主串S=ABACABABS=ABACABABS=ABACABAB,模式串T=AB

  • Python数据结构dict常用操作代码实例

    dict是python中的常用数据结构,应该尽量掌握其使用方法 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 代码如下 """ 初始化一个dict的四种方式: 1. dict() -> 创建一个空的dict 2. dict(mapping) -> new dictionary initialized from a mapping ob

随机推荐