4.Python列表、元组、字典与集合(在python中列表,元组,字典的区别)
在Python编程中,列表、元组、字典和集合是四种非常重要的数据结构,它们各自扮演着不同的角色,为数据的存储和处理提供了极大的便利。特别是在量化交易中,这些数据结构的应用尤为关键:
- 列表(List):主要用于存储一系列有序的元素,这些元素可以是不同类型的。列表是可变的,意味着我们可以在创建后添加、删除或修改其中的元素。列表非常适合用于需要保持元素顺序且元素数量可能变化的场景。
- 元组(Tuple):与列表类似,元组也是用于存储一系列有序的元素。然而,元组是不可变的,一旦创建,其元素就不能被修改。这种不可变性使得元组在需要保护数据不被意外修改的场景中非常有用,例如作为函数的返回值或作为字典的键。
- 字典(Dictionary):是一种无序的集合,用于存储键值对。字典中的每个键都是唯一的,并且与一个值相关联。字典非常适合用于需要快速查找、插入和删除操作的场景,例如缓存数据或实现映射关系。
- 集合(Set):是一个无序的、不包含重复元素的集合。集合主要用于数学上的集合操作,如并集、交集、差集等。由于集合中的元素是唯一的,因此它们非常适合用于去重或检查元素是否存在的场景。
4.1 列表的概念与操作:创建、访问、修改、删除
列表(List) 是Python中最常用的数据结构之一,它是一个有序的、可变的集合,可以存储任意类型的对象,包括数字、字符串、甚至是其他列表。列表通过方括号 [] 来定义,每个元素之间用逗号 , 分隔。
创建列表
# 创建一个包含几个数字的列表
numbers = [1, 2, 3, 4, 5]
print(numbers) # 输出: [1, 2, 3, 4, 5]
# 创建一个包含字符串的列表
fruits = ['apple', 'banana', 'cherry']
print(fruits) # 输出: ['apple', 'banana', 'cherry']
# 创建一个空列表
empty_list = []
print(empty_list) # 输出: []
访问列表元素
列表中的元素可以通过索引来访问,索引从0开始。
# 访问第一个元素
first_number = numbers[0]
print(first_number) # 输出: 1
# 访问最后一个元素(负数索引表示从后往前数)
last_fruit = fruits[-1]
print(last_fruit) # 输出: cherry
修改列表元素
列表是可变的,这意味着我们可以修改列表中的元素。
# 修改第二个元素
numbers[1] = 20
print(numbers) # 输出: [1, 20, 3, 4, 5]
删除列表元素
列表中的元素可以通过 del 语句或 pop() 方法来删除。
# 使用 del 语句删除第三个元素
del numbers[2]
print(numbers) # 输出: [1, 20, 4, 5]
# 使用 pop() 方法删除最后一个元素
last_element = numbers.pop()
print(last_element) # 输出: 5
print(numbers) # 输出: [1, 20, 4]
列表的其他操作
列表支持多种操作,如添加元素、切片、遍历等。
# 在列表末尾添加元素
numbers.append(6)
print(numbers) # 输出: [1, 20, 4, 6]
# 在指定位置插入元素
numbers.insert(2, 5)
print(numbers) # 输出: [1, 20, 5, 4, 6]
# 切片操作
sub_list = numbers[1:3]
print(sub_list) # 输出: [20, 5]
# 遍历列表
for num in numbers:
print(num)
# 输出:
# 1
# 20
# 5
# 4
# 6
4.2 元组的概念与操作:不可变序列
元组(Tuple) 是另一种有序集合,但与列表不同的是,元组是不可变的。这意味着一旦元组被创建,它的内容就不能被修改。元组通过圆括号 () 来定义,如果元组中只有一个元素,需要在元素后面加一个逗号 , 以避免歧义。
创建元组
# 创建一个包含几个数字的元组
numbers_tuple = (1, 2, 3, 4, 5)
print(numbers_tuple) # 输出: (1, 2, 3, 4, 5)
# 创建一个包含单个元素的元组
single_element_tuple = (1,)
print(single_element_tuple) # 输出: (1,)
# 不加逗号的单个元素不是元组,而是括号内的表达式
not_a_tuple = (1)
print(not_a_tuple) # 输出: 1
print(type(not_a_tuple)) # 输出:
访问元组元素
与列表类似,元组中的元素也可以通过索引来访问。
# 访问第一个元素
first_number = numbers_tuple[0]
print(first_number) # 输出: 1
# 访问最后一个元素
last_number = numbers_tuple[-1]
print(last_number) # 输出: 5
元组是不可变的
尝试修改元组中的元素会引发错误。
# 尝试修改元组中的元素
# numbers_tuple[0] = 10 # 这行代码会引发 TypeError
元组的其他操作
虽然元组是不可变的,但它们支持其他操作,如切片、遍历等。
# 切片操作
sub_tuple = numbers_tuple[1:3]
print(sub_tuple) # 输出: (2, 3)
# 遍历元组
for num in numbers_tuple:
print(num)
# 输出:
# 1
# 2
# 3
# 4
# 5
4.3 字典的概念与操作:键值对存储
字典(Dictionary) 是Python中一种无序的、可变的数据结构,用于存储键值对。每个键(Key)都映射到一个值(Value),键必须是唯一的,而值则可以是任意类型的对象。字典通过大括号 {} 来定义,每个键值对之间用逗号 , 分隔,键和值之间用冒号 : 分隔。
创建字典
# 创建一个包含几个键值对的字典
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(person) # 输出: {'name': 'Alice', 'age': 30, 'city': 'New York'}
# 创建一个空字典
empty_dict = {}
print(empty_dict) # 输出: {}
访问字典元素
字典中的元素可以通过键来访问。
# 访问字典中的值
name = person['name']
print(name) # 输出: Alice
# 检查键是否存在
if 'age' in person:
age = person['age']
print(age) # 输出: 30
修改字典元素
字典是可变的,因此我们可以修改字典中的值。
# 修改字典中的值
person['city'] = 'Los Angeles'
print(person) # 输出: {'name': 'Alice', 'age': 30, 'city': 'Los Angeles'}
删除字典元素
字典中的键值对可以通过 del 语句或 pop() 方法来删除。
# 使用 del 语句删除键值对
del person['age']
print(person) # 输出: {'name': 'Alice', 'city': 'Los Angeles'}
# 使用 pop() 方法删除键值对
city = person.pop('city')
print(city) # 输出: Los Angeles
print(person) # 输出: {'name': 'Alice'}
字典的其他操作
字典支持多种操作,如添加键值对、遍历等。
# 添加键值对
person['job'] = 'Engineer'
print(person) # 输出: {'name': 'Alice', 'job': 'Engineer'}
# 遍历字典
for key, value in person.items():
print(f"{key}: {value}")
# 输出:
# name: Alice
# job: Engineer
4.4 集合的概念与操作:无序且不重复的元素集合
集合(Set)是Python中一种非常有用的数据结构,它用于存储一系列不重复的元素。集合中的元素是无序的,即它们没有固定的顺序。集合主要用于执行数学上的集合操作,如并集、交集、差集等。
创建集合
- 使用花括号 {} 可以直接创建一个集合。
- 使用 set() 函数可以将其他可迭代对象(如列表、元组等)转换为集合。
# 使用花括号创建集合
my_set = {1, 2, 3, 4}
print(my_set) # 输出: {1, 2, 3, 4}(注意:输出顺序可能与输入不同)
# 使用set()函数创建集合
my_list = [1, 2, 2, 3, 4, 4]
my_set_from_list = set(my_list)
print(my_set_from_list) # 输出: {1, 2, 3, 4}(重复元素被移除)
添加元素
- 使用 add() 方法可以向集合中添加一个元素。
- 使用 update() 方法可以添加多个元素,这些元素可以是列表、元组、集合等可迭代对象。
# 添加单个元素
my_set.add(5)
print(my_set) # 输出: {1, 2, 3, 4, 5}
# 添加多个元素
my_set.update([6, 7, 8])
print(my_set) # 输出: {1, 2, 3, 4, 5, 6, 7, 8}
删除元素
- 使用 remove() 方法删除集合中的一个元素,如果该元素不存在,则会引发 KeyError 异常。
- 使用 discard() 方法删除集合中的一个元素,如果该元素不存在,则不会有任何异常发生。
- 使用 pop() 方法随机删除并返回集合中的一个元素,如果集合为空,则会引发 KeyError 异常。
# 删除单个元素(remove)
my_set.remove(2) # 如果2不存在,将引发KeyError
print(my_set) # 输出: {1, 3, 4, 5, 6, 7, 8}
# 删除单个元素(discard)
my_set.discard(9) # 如果9不存在,不会引发异常
print(my_set) # 输出: {1, 3, 4, 5, 6, 7, 8}(9不存在,集合不变)
# 随机删除一个元素(pop)
removed_element = my_set.pop()
print(removed_element) # 输出: 随机一个元素,例如8
print(my_set) # 输出: {1, 3, 4, 5, 6, 7}(8已被移除)
集合运算
- 并集:使用 | 运算符或 union() 方法。
- 交集:使用 & 运算符或 intersection() 方法。
- 差集:使用 - 运算符或 difference() 方法。
- 对称差集:使用 ^ 运算符或 symmetric_difference() 方法。
# 另一个集合
other_set = {4, 5, 6, 9, 10}
# 并集
union_set = my_set | other_set
print(union_set) # 输出: {1, 3, 4, 5, 6, 7, 9, 10}
# 交集
intersection_set = my_set & other_set
print(intersection_set) # 输出: {4, 5, 6}
# 差集
difference_set = my_set - other_set
print(difference_set) # 输出: {1, 3, 7}
# 对称差集
symmetric_difference_set = my_set ^ other_set
print(symmetric_difference_set) # 输出: {1, 3, 7, 9, 10}
判断关系
- 使用 in 运算符判断某个元素是否在集合中。
- 使用 issubset() 方法判断一个集合是否是另一个集合的子集。
- 使用 issuperset() 方法判断一个集合是否是另一个集合的超集。
# 判断元素是否在集合中
print(4 in my_set) # 输出: True
print(11 in my_set) # 输出: False
# 判断子集关系
print(my_set.issubset(other_set)) # 输出: False(my_set不是other_set的子集)
print({4, 5}.issubset(my_set)) # 输出: True({4, 5}是my_set的子集)
# 判断超集关系
print(my_set.issuperset(other_set)) # 输出: False(my_set不是other_set的超集)
print({1, 2, 3, 4, 5, 6, 7}.issuperset(my_set)) # 输出: True({1, 2, 3, 4, 5, 6, 7}是my_set的超集)
集合的大小
- 使用 len() 函数获取集合中元素的数量。
# 获取集合大小
print(len(my_set)) # 输出: 7(当前my_set中有7个元素)
4.5总结
列表(List)作为可变序列的代表,其灵活性和多功能性使其成为处理有序数据集合的首选。无论是数据收集、排序、修改还是遍历,列表都能轻松应对,是Python编程中最常用的数据结构之一。
元组(Tuple)则以不可变性见长,这种特性使其在安全存储不可修改的数据时具有独特优势。元组经常用于表示函数返回值、数据结构的固定部分等场景,其不可变性还带来了性能上的优化和代码的可读性提升。
字典(Dictionary)以其键值对的形式存储数据,提供了高效的数据检索和更新机制。在需要快速查找或更新数据时,字典无疑是一个理想的选择。字典的广泛应用,从简单的缓存到复杂的映射关系,都展示了其强大的功能。
集合(Set)则是无序且不重复的元素集合,主要用于数学上的集合操作,如并集、交集、差集等。集合的独特之处在于其元素的无序性和唯一性,这使得它在处理去重、元素存在性检查等任务时表现出色。
这四大数据结构相互补充,共同构成了Python编程的基石。它们不仅提供了丰富的功能,还带来了简洁明了的语法和高效的性能。掌握这些数据结构,对于提高Python编程能力和解决实际问题具有重要意义。
在量化交易的道路上,每一步都充满了挑战与机遇,而掌握高效的数据处理工具则是迈向成功的关键。为了获取更多关于Python编程、量化交易策略、市场动态以及技术分析的精彩内容,我们诚挚地邀请您关注我们的头条号,以及微信公众号“小天Python学习笔记”获取更多精彩内容!