在数据科学领域,掌握Python语言及其数据结构是初学者和专业人士的必备技能。尽管Python提供了众多的数据结构,但大约80%的情况下,只使用其中的四种:列表、元组、字典和集合。本文将探讨这些数据结构的基本特性、操作和使用场景,并比较它们之间的差异。
列表是有序的、可变的数据集合,用方括号[]包裹,值之间用逗号分隔。它们可以包含不同类型的数据,允许重复值,并且是可迭代的。
使用场景:列表通常用于存储属于同一类别的相似数据,例如水果列表、班级中学生的列表等。
# 创建一个花卉列表
flowers = ['Rose', 'Iris', 'Hyacinth', 'Lily', 'Tulip']
列表操作:包括访问、添加、修改、删除和清空列表元素。以下是对花卉列表的操作示例。
# 访问列表中的元素
print(flowers[1]) # 输出: Iris
print(flowers[2:4]) # 输出: ['Hyacinth', 'Lily']
# 向列表中添加元素
flowers.append('Lotus')
flowers.insert(3, 'Magnolia')
flowers.extend(['Jasmine', 'Carnation'])
# 从列表中移除/删除元素
del flowers[1]
flowers.pop(0)
flowers.remove('Lotus')
# 替换列表中的元素
flowers[3] = 'Orchid'
# 使用列表推导式替换值
flowers = ['Daffodil' if i == 'Lily' else i for i in flowers]
# 对列表中的元素进行排序
flowers.sort()
列表的其他操作还包括清空列表和删除整个列表。
元组是有序的、不可变的数据集合,用圆括号()包裹。不可变意味着它们不能被修改,不能添加或删除元素。
使用场景:元组适用于数据不应被更改的场景,例如存储地点的经纬度坐标。
# 创建一个邮编元组
pincodes = (500010, 500045, 500022, 500068, 500034)
元组操作:包括访问、排序和赋值元素。以下是对邮编元组的操作示例。
# 访问元组中的元素
print(pincodes[3]) # 输出: 500068
print(pincodes[0:4]) # 输出: (500010, 500045, 500022, 500068)
# 对元组中的值进行排序
sorted(pincodes) # sorted返回一个新列表,包含排序后的值,不改变原始元组
# 元组赋值
a, b, c = (1, 2, 3)
print(a) # 输出: 1
print(b) # 输出: 2
print(c) # 输出: 3
# 元组连接
tuple1 = (10, 20, 30)
tuple2 = tuple1 + (40, 50, 60) # 连接
字典是无序的、可变的数据集合,以键值对的形式存储数据,用花括号{}包裹。值可以是可变的和重复的,但键必须是唯一的和不可变的。
使用场景:字典适用于需要快速访问数据的场景,而无需遍历所有值,例如存储员工数据。
# 创建一个员工字典
Employee = {'Id': 1, 'Name': 'Tom', 'Age': 30, 'Education': 'Masters', 'Department': 'IT', 'Salary': 100000}
字典操作:包括访问、添加、修改、删除和清空字典元素。以下是对员工字典的操作示例。
# 访问字典中的元素
print(Employee['Name']) # 输出: Tom
# 查找键是否存在
'Education' in Employee # 输出: True
# 查看键
Employee.keys() # 输出: dict_keys(['Id', 'Name', 'Age', 'Education', 'Department', 'Salary'])
# 查看值
Employee.values() # 输出: dict_values([1, 'Tom', 30, 'Masters', 'IT', 100000])
# 向字典中添加元素
Employee['Bonus'] = 'Yes'
# 从字典中删除元素
del Employee['Bonus']
Employee.pop('Salary')
Employee.popitem()
字典的其他操作还包括清空字典和删除整个字典。
# 创建一个类型集合
Genres = {"Fiction", "NonFiction", "Drama", "Poetry"}
# 向集合中添加元素
Genres.add("Folktale")
Genres.update(['Horror', 'Distopian', 'SciFi'])
# 从集合中移除元素
Genres.remove("Poetry")
Genres.discard("Thriller")
# 对集合进行数学操作
Set1 = {1, 2, 3, 4, 5}
Set2 = {4, 5, 6, 7, 8}
Set1 & Set2 # 交集
Set1.intersection(Set2) # 交集
Set1.union(Set2) # 并集
Set3 = {1, 2, 3}
Set3.issubset(Set1) # 子集
Set1.issuperset(Set3) # 超集
Set1.difference(Set2) # 差集