Python 作为一门强大的编程语言,其丰富的数据结构是其受欢迎的关键原因之一。掌握这些数据结构不仅能提高代码效率,更能解决复杂问题。本文将系统梳理 Python 数据结构体系,从原始类型到复杂的自定义结构,并通过简洁案例展示其应用精髓。
以下是对Python数据结构的详细讲解:
一、列表(List)
(一)定义和特点
列表是Python中最常用的数据结构之一。它是一个有序的元素序列,用方括号[]
表示,元素之间用逗号分隔。列表中的元素可以是不同类型的数据,如整数、字符串、浮点数等。
# 创建一个列表
my_list = [1, "hello", 3.14, True]
列表具有以下特点:
- 可变性:列表是可变的(Mutable),即可以在创建后对其进行修改,如添加、或删除修改元素。
- 有序性:列表中的元素是有顺序的,可以通过索引来访问特定位置的元素。
- 允许重复元素:列表中可以包含重复的元素。
(二)常见操作
-
访问元素:通过索引访问列表中的元素,索引从0开始。
print(my_list[0]) # 输出 1
-
添加元素:
- 使用
append()
方法在列表末尾添加一个元素。my_list.append(100)
- 使用
insert()
方法在指定位置插入一个元素。my_list.insert(1, "Python")
- 使用
-
删除元素:
- 使用
remove()
方法删除列表中第一个匹配的元素。my_list.remove("hello")
- 使用
pop()
方法删除指定索引位置的元素,并返回该元素。popped_element = my_list.pop(2)
- 使用
-
修改元素:直接通过索引赋值来修改指定位置的元素。
my_list[0] = 2
-
列表连接:使用
+
运算符可以将两个列表连接成一个新列表。list1 = [1, 2, 3] list2 [ =4, 5, 6] combined_list = list1 + list2 # 结果为 [1, 2, 3, 4, 5, 6]
二、元组(Tuple)
(一)定义和特点
元组与列表类似,也是一个有序的元素序列,用圆括号()
表示。元组中的元素也可以是不同类型的数据,但元组是不可变的(Immutable),即一旦创建后,不能对其进行修改。
# 创建一个元组
my_tuple = (1, "hello", 3.14, True)
元组具有以下特点:
- 不可变性:元组不能被修改,不能添加、删除或修改元素。
- 有序性:元组中的元素是有顺序的,可以通过索引来访问特定位置的元素。
- 允许重复元素:元组中可以包含重复的元素。
(二)常见操作
-
访问元素:与列表类似,通过索引访问元组中的元素。
print(my_tuple[1]) # 输出 "hello"
-
元组解包:可以将元组中的元素解包到多个变量中。
a, b, c, d = my_tuple print(a, b, c, d) # 输出 1 hello 3.14 True
三、字典(Dictionary)
(一)定义和特点
字典是一个无序的键值对(Key-Value Pair)集合,用大括号{}
表示。每个键值对由一个键和一个值组成,键和值之间用冒号:
分隔,键值对之间用逗号分隔。
# 创建一个字典
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
字典具有以下特点:
- 无序性:字典中的元素是无序的,不能通过索引来访问元素。
- 可变性:字典是可变的,可以在创建后添加、删除或修改键值对。
- 键的唯一性:字典中的键必须是唯一的,不能有重复的键。
(二)常见操作
-
访问元素:通过键来访问字典中的值。
print(my_dict["name"]) # 输出 "Alice"
-
添加键值对:直接通过新的键赋值来添加键值对。
my_dict["country"] = "USA"
-
删除键值对:
- 使用
del
语句删除指定的键值对。del my_dict["age"]
- 使用
pop()
方法删除指定键值对,并返回该值。removed_value = my_dict.pop("city")
- 使用
-
获取所有键、值或键值对:
- 使用
keys()
方法获取所有键。keys = my_dict.keys()
- 使用
values()
方法获取所有值。values = my_dict.values()
- 使用
items()
方法获取所有键值对。items = my_dict.items()
- 使用
四、集合(Set)
(一)定义和特点
集合是一个无序的不重复元素集合,用大括号{}
或set()
函数表示。集合中的元素是唯一的,不能有重复的元素。
# 创建一个集合
my_set = {1, 2, 3, 4, 5}
集合具有以下特点:
- 无序性:集合中的元素是无序的,不能通过索引来访问元素。
- 可变性:集合是可变的,可以在创建后添加、删除元素。
- 元素唯一性:集合中的元素必须是唯一的,不能有重复的元素。
(二)常见操作
-
添加元素:
- 使用
add()
方法添加一个元素。my_set.add(6)
- 使用
update()
方法添加多个元素。my_set.update([7, 8, 9])
- 使用
-
删除元素:
- 使用
remove()
方法删除指定元素。如果元素不存在,会引发错误。my_set.remove(3)
- 使用
discard()
方法删除指定元素。如果元素不存在,不会引发错误。my_set.discard(10)
- 使用
-
集合运算:
- 并集:使用
union()
方法或|
运算符获取两个集合的并集。set1 = {1, 2, 3} set2 = {3, 4, 5} union_set = set1.union(set2) # 或 set1 | set2
- 交集:使用
intersection()
方法或&
运算符获取两个集合的交集。intersection_set = set1.intersection(set2) # 或 set1 & set2
- 差集:使用
difference()
方法或-
运算符获取两个集合的差集。difference_set = set1.difference(set2) # 或 set1 - set2
- 并集:使用
五、字符串(String)
(一)定义和特点
字符串是由字符组成的序列,用单引号' '
或双引号" "
表示。字符串是不可变的(Immutable),即一旦创建后,不能对其进行修改。
# 创建一个字符串
my_string = "Hello, World!"
字符串具有以下特点:
- 不可变性:字符串不能被修改,不能添加、删除或修改字符。
- 有序性:字符串中的字符是有顺序的,可以通过索引来访问特定位置的字符。
- 允许重复字符:字符串中可以包含重复的字符。
(二)常见操作
-
访问字符:通过索引访问字符串中的字符。
print(my_string[0]) # 输出 'H'
-
字符串拼接:使用
+
运算符可以将两个字符串拼接成一个新字符串。str1 = "Hello" str2 = "World" combined_str = str1 + " " + str2 # 结果为 "Hello World"
-
字符串长度:使用
len()
函数获取字符串的长度。length = len(my_string)
-
字符串方法:
- 查找子字符串:使用
find()
方法查找子字符串的位置。index = my_string.find("World")
- 替换子字符串:使用
replace()
方法替换子字符串。new_string = my_string.replace("World", "Python")
- 分割字符串:使用
split()
方法将字符串分割成列表。words = my_string.split(" ")
- 查找子字符串:使用
六、数组(Array)
(一)定义和特点
数组是一种线性数据结构,用于存储相同类型的元素。在Python中,数组可以通过array
模块来创建,数组中的元素必须是相同类型的数据。
import array as arr# 创建一个整数数组
my_array = arr.array('i', [1, 2, 3, 4, 5])
数组具有以下特点:
- 相同类型元素:数组中的元素必须是相同类型的数据。
- 可变性:数组是可变的,可以在创建后添加、删除或修改元素。
- 有序性:数组中的元素是有顺序的,可以通过索引来访问特定位置的元素。
(二)常见操作
-
访问元素:通过索引访问数组中的元素。
print(my_array[2]) # 输出 3
-
添加元素:
- 使用
append()
方法在数组末尾添加一个元素。my_array.append(6)
- 使用
extend()
方法在数组末尾添加多个元素。my_array.extend([7, 8, 9])
- 使用
-
删除元素:
- 使用
remove()
方法删除数组中第一个匹配的元素。my_array.remove(3)
- 使用
pop()
方法删除指定索引位置的元素,并返回该元素。popped_element = my_array.pop(1)
- 使用
-
修改元素:直接通过索引赋值来修改指定位置的元素。
my_array[0] = 10
七、数据结构的比较和选择
在选择合适的数据结构时,需要考虑以下因素:
- 数据的有序性:如果需要保持元素的顺序,可以选择列表或字符串;如果不需要保持顺序,可以选择集合或字典。
- 数据的可变性:如果需要在创建后修改数据,可以选择列表、字典、集合或数组;如果不需要修改,可以选择元组或字符串。
- 数据的唯一性:如果需要存储唯一的元素,可以选择集合;如果允许重复元素,可以选择列表、元组、字符串或数组。
- 数据的类型:如果需要存储相同类型的元素,可以选择数组;如果允许不同类型的元素,可以选择列表、元组、字典或集合。
通过合理选择和使用不同的数据结构,可以有效地组织和操作数据,提高程序的性能和可读性。
文章来源于zlibrary图书馆中《python入门》书的Python数据结构全解析章节内容