面试python中的数据结构
Posted 黑黑白白君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试python中的数据结构相关的知识,希望对你有一定的参考价值。
文章目录
- 数据结构是高效存储和组织数据的一种方法,它允许你轻松访问和执行数据操作。
- 在数据结构方面,没有一种适合所有类型的模型。根据不同的需要选择不同的方式来存储数据。
- 也许你想把所有类型的数据存储在一起,或者你想要一些更快的数据搜索,或者一些只存储不同数据项的东西。
- Python有许多内置的数据结构,可以帮助我们轻松地组织数据,因此有必要先了解这些,以便我们在处理数据时,确切地知道哪些数据结构将有效地解决我们的问题。
Python中的内置数据结构(Built-in Data Structure)包括:列表list、元组tuple、字典dict、集合set。
1)列表(list)
列表(List)是一种有序和可更改的集合。Python中的列表是最通用的数据结构,它们用于存储异构数据项。
- 元素可以是任何数据类型,如数字、字符串等,甚至是另一个列表。
1.1 特点
- 列表中的每个元素均可变:意味着可以对每个元素进行修改和删除。
- 列表是有序的:每个元素的位置是确定的,可以用索引去访问每个元素。
- 列表中的元素可以是Python中的任何对象:元素可以是字符串、整数、元组、也可以是list等Python中的对象。
Python中的list和C语言中的数组很像,只是list中的元素类型可以为Python中的任意对象,C中的数组只能是同种类型。
>>> x = [1,2,3] >>> y = {'name':'Sakura'} >>> z="Test" >>> a=[x,y,z] >>> a [[1, 2, 3], {'name': 'Sakura'}, 'Test']
注意 :list不仅可以像数组那样正向索引,也可以反向索引。
1.2 常用方法
thislist = ["apple", "banana", "cherry"] # 创建
print(thislist[1]) # 通过索引号访问
print(thislist[-1]) # 反向索引,-1表示最后一个
print(thislist[2:5]) # 通过指定范围的起点和终点来指定索引范围,返回值将是包含指定项目的新列表,注意是左闭右开
thislist[1] = "mango" # 改
print(len(thislist)) # 列表长度
-
切片
切片是Python中序列结构独有的一种操作,意思是从序列中选取一个子序列,凡是序列均可切片,list是序列,所以list可以切片。
# 通过[begin:end]方式完成切片 mylist = [1,2,3,4,5] mylist[0:2] # 生成的序列为[1,2,3]
-
检查是否存在指定的项
使用
in
关键字thislist = ["apple", "banana", "cherry"] if "apple" in thislist: print("Yes, 'apple' is in the fruits list")
-
添加项目
append()
或者insert()
thislist = ["apple", "banana", "cherry"] thislist.append("orange") # 将项目添加到列表的末尾 thislist.insert(1, "orange") # 在指定的索引处添加项目
-
删除项目
remove()
或者pop()
或者del
或者clear()
thislist = ["apple", "banana", "cherry"] thislist.remove("banana") # 删除指定的项目 thislist.pop() # 删除指定的索引(如果未指定索引,则删除最后一项) del thislist[0] # 删除指定的索引 thislist.clear() # 清空列表
-
复制列表
copy()
或者list()
list2 = list1 # 注意:list2 将只是对 list1 的引用,list1 中所做的更改也将自动在 list2 中进行。 thislist = ["apple", "banana", "cherry"] mylist = thislist.copy() # 使用内置的 List 方法 copy() mylist = list(thislist) # 使用内建的方法 list()
-
合并两个列表
使用 + 运算符或者extend()
list1 = ["a", "b" , "c"] list2 = [1, 2, 3] list3 = list1 + list2 list1.extend(list2)
-
常用的内建方法:
方法 描述 append() 在列表的末尾添加一个元素 clear() 删除列表中的所有元素 copy() 返回列表的副本 count() 返回具有指定值的元素数量。 extend() 将列表元素(或任何可迭代的元素)添加到当前列表的末尾 index() 返回具有指定值的第一个元素的索引 insert() 在指定位置添加元素 pop() 删除指定位置的元素 remove() 删除具有指定值的项目 reverse() 颠倒列表的顺序 sort() 对列表进行排序
2)元组(Tuple)
元组是有序且不可更改的集合。元组为一个固定的列表,一旦初始化其中的元素便不可修改,只能对元素进行查询。
2.1 特点
- tuple不支持对元素的修改(包括删除),tuple一初始化便固定下来了。
涉及到Python中的可变对象和不可变对象,像list这样的就是可变对象,tuple便是不可变对象。
- 因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
2.2 常见操作
-
因为元组是固定的列表,所以其内置的大多数的方法和列表是差不多的。
-
如需创建仅包含一个项目的元组,必须在该项目后添加一个逗号,否则 Python 无法将变量识别为元组。
- 空的tuple可以记为(),若只有一个元素的tuple记为(1,)
-
可以通过tuple将序列转换为元组,用法和list一样。
-
创建元组后,将无法更改其值,但是有一种解决方法:可以将元组转换为列表,更改列表,然后将列表转换回元组。
-
del 关键字可以完全删除元组。
3)字典(Dictionary)
字典是一个无序、可变和有索引的集合。Python中使用键(key)-值(value)存储,也就是C++中的map。
3.1 特点
- 字典中的数据必须以键值对的形式出现。
- 键不可重复,值可重复。
- 字典中键(key)是不可变的,为不可变对象,不能进行修改;而值(value)是可以修改的,可以是任何对象。
3.2 常见操作
thisdict = { # 创建
"brand": "Porsche",
"model": "911",
"year": 1963
}
x = thisdict["model"] # 获取 "model" 键的值
x = thisdict.get("model") # 同上
thisdict["year"] = 2019 # 更改
for x in thisdict.values(): # 使用 values() 函数返回字典的值
print(x)
for x, y in thisdict.items(): # 使用 items() 函数遍历键和值
print(x, y)
thisdict.pop("model") # pop() 方法删除具有指定键名的项
del thisdict["model"] # del 关键字删除具有指定键名的项目
mydict = thisdict.copy() # 使用 copy() 方法来复制字典
mydict = dict(thisdict) # 使用 dict() 方法创建字典的副本
- 注意:不能通过键入 dict2 = dict1 来复制字典,因为:dict2 只是对 dict1 的引用,而 dict1 中的更改也将自动在 dict2 中进行。
4)集合(Set)
集合是无序和无索引的集合。
4.1 特点
- 集合更接近数学上集合的概念。集合中每个元素都是无序的、不重复的任意对象。
- 可以通过集合去判断数据的从属关系,也可以通过集合把数据结构中重复的元素减掉。
- 集合一旦创建,就无法更改项目,但是可以添加新项目。
4.2 常见操作
集合可做集合运算,可添加和删除元素。
-
集合的创建
创建集合时需要用list作为输入集合,可通过add()方法增加元素,remove()方法删除元素。
- 集合中重复的元素会被过滤掉。
- 使用 update() 方法将多个项添加到集合中。
>>> test=set([1,2,3]) >>> test {1, 2, 3} thisset = {"apple", "banana", "cherry"} thisset.update(["orange", "mango", "grapes"])
-
合并两个集合
可以使用
union()
方法返回包含两个集合中所有项目的新集合,也可以使用update()
方法将一个集合中的所有项目插入另一个集合中。set1 = {"a", "b" , "c"} set2 = {1, 2, 3} set3 = set1.union(set2) set1.update(set2)
-
集合的运算
Python中的集合也可以进行集合的之间的交、并等运算。
>>> s1 = set([1,2]) >>> s2=set([2,3]) >>> s1 & s2 # s1与s2 {2} >>> s1 | s2 # s1与s2进行或运算 {1, 2, 3}
【部分内容参考自】
- 【Python】Python中的数据结构:https://www.cnblogs.com/myworld7/p/8449614.html
- Python 教程:https://www.w3school.com.cn/python/python_lists.asp
以上是关于面试python中的数据结构的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段
python 用于数据探索的Python代码片段(例如,在数据科学项目中)
在 Python 多处理进程中运行较慢的 OpenCV 代码片段
2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试