跳到主要内容Python 数据结构核心指南与常见面试题解析 | 极客日志Python算法
Python 数据结构核心指南与常见面试题解析
Python 内置数据结构涵盖列表、元组、字典、集合等,掌握其特性与操作是编程基础。本文梳理了各类型的创建、常用方法及区别,并结合典型面试题进行实战演练,帮助开发者巩固知识体系,应对技术考核。
Python 内置了多种常用的数据结构,用于高效地组织和存储数据。掌握这些结构及其特性,是编写高质量代码的基础。
1. 列表 (List)
列表是有序、可变的序列,允许存储不同类型的元素。
特点:
- 用方括号
[] 表示
- 元素可以重复
- 支持索引和切片操作
- 可变(可修改、添加、删除元素)
基本操作:
my_list = [1, "apple", 3.14, True]
print(my_list[0])
print(my_list[-1])
print(my_list[1:3])
my_list.append("new")
my_list.insert(1, "orange")
my_list.remove("apple")
del my_list[0]
popped = my_list.pop()
print(len(my_list))
print("apple" in my_list)
my_list.reverse()
my_list.sort()
2. 元组 (Tuple)
元组是有序、不可变的序列,适合存储不应被修改的数据。
- 用圆括号
() 表示
- 元素可以重复
- 支持索引和切片操作
- 不可变(创建后不能修改)
- 比列表更节省内存,访问速度更快
my_tuple = (1, "apple", 3.14)
my_tuple = 1, "apple", 3.14
single_tuple = (5,)
print(my_tuple[0])
print(my_tuple[-1])
print(my_tuple[1:])
print(len(my_tuple))
print("apple" in my_tuple)
print(my_tuple.count("apple"))
print(my_tuple.index(3.14))
list_from_tuple = list(my_tuple)
3. 字典 (Dictionary)
字典是无序(Python 3.7+ 保持插入顺序)、可变的键值对集合。
- 用花括号
{} 表示
- 键必须唯一且不可变(字符串、数字、元组)
- 值可以是任何类型
- 支持键访问
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
my_dict = dict(name="Alice", age=25, city="New York")
print(my_dict["name"])
print(my_dict.get("age"))
print(my_dict.get("gender", "Unknown"))
my_dict["age"] = 26
my_dict["gender"] = "Female"
del my_dict["city"]
popped = my_dict.pop("age")
for key in my_dict:
print(key)
for value in my_dict.values():
print(value)
for key, value in my_dict.items():
print(key, value)
print(len(my_dict))
print("name" in my_dict)
print(my_dict.keys())
print(my_dict.values())
4. 集合 (Set)
集合是无序、可变的唯一元素集合,常用于去重和数学运算。
- 用花括号
{} 表示(注意空集合用 set() 而不是 {})
- 元素不可重复
- 不支持索引
- 支持集合运算(并集、交集、差集等)
my_set = {1, 2, 3, 4, 5}
my_set = set([1, 2, 3, 2, 1])
my_set.add(6)
my_set.update([7, 8, 9])
my_set.remove(3)
my_set.discard(10)
popped = my_set.pop()
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a | b)
print(a & b)
print(a - b)
print(a ^ b)
print(len(my_set))
print(3 in my_set)
my_set.clear()
5. 字符串 (String)
- 用单引号
' 或双引号 " 表示
- 支持索引和切片
- 不可变
my_str = "Hello, World!"
print(my_str[0])
print(my_str[-1])
print(my_str[7:12])
print(my_str.upper())
print(my_str.lower())
print(my_str.split(","))
print(my_str.replace("Hello", "Hi"))
print(my_str.strip())
print(my_str.startswith("Hello"))
print(my_str.endswith("!"))
name = "Alice"
age = 25
print(f"My name is {name} and I'm {age} years old.")
print("My name is {} and I'm {} years old.".format(name, age))
print("My name is %s and I'm %d years old." % (name, age))
6. 其他数据结构
from collections import deque
queue = deque([1, 2, 3])
queue.append(4)
queue.popleft()
from collections import deque
stack = deque([1, 2, 3])
stack.append(4)
stack.pop()
import heapq
heap = [3, 1, 4, 1, 5, 9]
heapq.heapify(heap)
heapq.heappush(heap, 2)
heapq.heappop(heap)
有序字典 (OrderedDict):保持插入顺序的字典(Python 3.7+ 中普通字典已保持插入顺序)
from collections import OrderedDict
od = OrderedDict([("a", 1), ("b", 2)])
默认字典 (defaultdict):带有默认值的字典
from collections import defaultdict
dd = defaultdict(int)
dd["a"] += 1
7. 面试题目
题目 1:填空题
在 Python 中,__________ 是一种可以存储多个不同类型数据的容器类型。
在 Python 中,__________ 是不可变的数据结构,它与列表类似,但其元素一旦定义就不能修改。
答案: 列表(list);元组(tuple)
解析: 列表支持混合类型存储且可变;元组与列表结构相似但不可修改。
题目 2:简答题
简要说明列表和元组的区别。Python 中如何使用字典来存储键值对?请给出示例代码。
- 列表: 可变、有序、允许重复,使用
[] 定义,支持 append()/remove() 等操作。
- 元组: 不可变、有序、允许重复,使用
() 定义,适用于保护数据不被修改的场景(如字典键)。
- 字典键值对示例:
student_scores = {"张三": 85, "李四": 90, "王五": 88}
print(student_scores["张三"])
题目 3:选择题
以下哪个数据结构是无序的、可变的、并且不允许重复元素?
A. 列表(list) B. 元组(tuple) C. 字典(dict) D. 集合(set)
答案: D. 集合(set)
解析: 集合天然去重且无序,支持并集/交集等操作。
题目 4:编程题
编写一个 Python 程序,使用字典存储学生的姓名和成绩,要求程序可以根据学生姓名查询成绩。
students = {
"张三": 85,
"李四": 90,
"王五": 88
}
name = input("请输入学生姓名:")
if name in students:
print(f"{name}的成绩是:{students[name]}")
else:
print("该学生不存在")
题目 5:选择题
在 Python 中,使用下列哪个数据结构可以实现键值对存储?
A. list B. tuple C. dict D. set
答案: C. dict
解析: 字典通过 {键:值} 存储,是唯一支持键值对的内置结构。
题目 6:填空题
Python 中的__________ 是一种有序的容器类型,允许元素重复,可以通过索引来访问其元素。
Python 中的__________ 是一种键值对数据结构,每个元素都包含一个键和一个值。
答案: 列表(list);字典(dict)
解析: 列表通过索引访问(如 list[0]);字典通过键访问(如 dict["key"])。
题目 7:编程题
编写一个 Python 程序,计算并输出列表 [2, 4, 6, 8, 10] 中所有元素的和。提示:使用 for 循环或者 sum() 函数。
numbers = [2, 4, 6, 8, 10]
total = sum(numbers)
print(f"列表元素和为:{total}")
题目 8:简答题
简要说明列表和集合的区别,并举例说明它们各自的应用场景。
- 列表 vs 集合:
- 列表: 有序、可变、允许重复,适用于需要保持顺序的场景(如任务队列)。
- 集合: 无序、可变、自动去重,适用于需要快速判断元素存在的场景(如去重、集合运算)。
题目 9:选择题
以下哪种数据结构是 Python 中的不可变类型?
A. 列表(list) B. 字典(dict) C. 元组(tuple) D. 集合(set)
答案: C. 元组(tuple)
解析: 元组不可变,常用于定义常量;列表/字典/集合均为可变类型。
题目 10:编程题
编写一个 Python 程序,给定一个列表,删除其中重复的元素并返回一个新的列表。
示例:输入 [1, 2, 2, 3, 4, 4, 5],输出 [1, 2, 3, 4, 5]
def remove_duplicates(lst):
seen = set()
new_list = []
for item in lst:
if item not in seen:
seen.add(item)
new_list.append(item)
return new_list
original = [1, 2, 2, 3, 4, 4, 5]
result = remove_duplicates(original)
print(result)
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
- HTML转Markdown
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online