介绍
在本实验中,我们将学习 Python 中的数据结构,主要内容包括:列表(lists)、元组(tuples)、字典(dictionaries)和集合(sets)。
学习目标
- 列表
- 列表推导式(List Comprehensions)
- 元组
- 字典
- 集合
在本实验中,我们将学习 Python 中的数据结构,主要内容包括:列表(lists)、元组(tuples)、字典(dictionaries)和集合(sets)。
在 Python 中,列表(lists)是一种多功能的容器,能够存储各种类型的对象。在这里,我们将探索列表的基本操作,例如创建、访问值、更新值、追加值和删除值。
列表通过用方括号括起来的逗号分隔值来定义。列表中的数据项不需要是相同类型。
>>> l1 = [1, 2, 3, 'a', 'hello']
>>> l1
[1, 2, 3, 'a', 'hello']
>>> l2 = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday']
>>> l2
['monday', 'tuesday', 'wednesday', 'thursday', 'friday']
使用下标索引访问列表中的值。
>>> print("l1[0] = ", l1[0])
l1[0] = 1
你可以使用方括号的形式来截取字符,这被称为切片(slice)。切片是一种从列表中提取一定范围内元素的方式。
list_name[Start:End:Step]
第一个索引(Start)是起始索引,第二个索引(End)是结束索引。第三个索引(Step)是步长,步长是增量(默认为 1)。
>>> print("l2[1:3] = ", l2[1:3])
l2[1:3] = ['tuesday', 'wednesday']
你可以通过使用下标索引访问值,然后为其分配新值来更新值:
>>> l1[0] = 10
>>> l1
[10, 2, 3, 'a', 'hello']
你可以使用 append() 方法向列表追加值。
list_name.append(value)
>>> l1.append('b')
>>> l1
[10, 2, 3, 'a', 'hello', 'b']
>>> l2.append('statuday')
>>> l2
['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'statuday']
你可以使用 del 关键字从列表中删除值,此方法会删除列表中指定索引处的元素。
del list_name[index]
>>> del l1[0]
>>> l1
[2, 3, 'a', 'hello', 'b']
你也可以使用 remove() 方法从列表中删除指定的值。
list_name.remove(value)
>>> l1.remove('a')
>>> l1
[2, 3, 'hello', 'b']
你可以使用 len() 函数获取列表的长度。
>>> print("Length of l1 = ", len(l1))
Length of l1 = 5
并使用 sorted() 函数对列表进行排序。
>>> print("Sorted of l2 = ", sorted(l2))
Sorted of l2 = ['friday', 'monday', 'thursday', 'tuesday', 'wednesday']
列表推导式(List Comprehension)是一种简洁而强大的方式,用于在 Python 中通过遍历现有的可迭代对象(如列表)并对每个元素应用表达式来创建新列表。
列表推导式的格式可以理解为一个 for 循环。其语法如下:
new_list = [expression for item in old_list]
new_list = [expression for item in old_list if condition]
new_list:通过对旧列表中的每个元素应用表达式生成的新列表。expression:对旧列表中的每个元素应用的操作或转换,以生成新列表。item:表示旧列表中每个元素的变量。old_list:用于生成新列表的现有列表。condition(可选):一个过滤条件,用于根据指定标准仅包含旧列表中的某些元素。让我们在 Python shell 中练习列表推导式:
>>> ls = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> even_list = [item for item in ls if item % 2 == 0]
>>> even_list
[2, 4, 6, 8, 10]
在这个例子中,even_list 将只包含列表 ls 中的偶数。
列表推导式提供了一种简洁且易读的方式来操作列表,使 Python 代码更具表现力和效率。
元组(Tuples)与 Python 中的列表类似,但元组的元素是不可变的(immutable),这意味着它们在创建后不能被修改。元组的元素用 () 括起来,并用 , 分隔。
使用以下元素创建元组:
>>> tup1 = ('Google', 'Run', 'Python')
>>> tup2 = (1, 2, 3, 4, 5)
>>> empty_tup = ()
>>> tup1
('Google', 'Run', 'Python')
>>> tup2
(1, 2, 3, 4, 5)
>>> empty_tup
()
使用索引访问元组的元素:
>>> print(tup1[0])
Google
>>> print(tup2[1:3])
(2, 3)
>>> print(empty_tup[0])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: tuple index out of range ## 发生错误,因为元组为空。
虽然元组不能被修改,但它们可以被合并:
>>> tup3 = tup1 + tup2
>>> print(tup3)
('Google', 'Run', 'Python', 1, 2, 3, 4, 5)
元组提供了一种可靠的方式来存储不应被修改的数据,为你的 Python 程序提供了稳定性和完整性。
Python 中的字典(Dictionaries)是一种多功能且可变的数据结构,用于存储键值对(key-value pairs)。
每个键值对用冒号分隔,每对之间用逗号分隔,整个字典用花括号 {} 括起来。
d = {key1 : value1, key2 : value2, key3 : value3 }
字典中的键必须是唯一的,但值可以重复。
使用键值对创建字典:
>>> dict1 = {'name': 'James', "age": 23, "phone": "12345"}
>>> dict2 = {}
>>> dict1
{'name': 'James', 'age': 23, 'phone': '12345'}
>>> dict2
{}
使用方括号 [] 中的键或 get() 函数访问键值对:
>>> print(dict1["name"])
James
>>> print(dict2["name"])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'name'
>>> print(dict2.get("name"))
None
使用 dict[key] 访问字典中不存在的键会引发 KeyError 异常。然而,如果键未找到,dict.get(key) 会返回 None。
通过为键赋值来添加或修改字典中的条目:
>>> dict2["name"] = "Lily"
>>> dict1["name"] = "Bob"
>>> dict2["name"]
'Lily'
>>> dict1["name"]
'Bob'
使用 del dict[key] 删除键值对,或使用 dict.clear() 清空整个字典:
>>> del dict1["name"]
>>> print(dict1)
{'age': 23, 'phone': '12345'}
>>> dict2.clear()
>>> print(dict2)
{}
字典提供了一种灵活的方式来存储和操作数据,使其成为 Python 编程中各种任务的重要组成部分。
Python 中的集合(Sets)是无序且元素唯一的集合。它们可以使用花括号 {} 或 set() 函数创建。
要创建一个空集合,必须使用 set() 而不是 {},因为 {} 用于创建空字典。使用不同的方法创建集合:
>>> set1 = set()
>>> print(set1)
set()
>>> set2 = {'apple', 'orange', 'banana'}
>>> print(set2)
{'banana', 'apple', 'orange'}
>>> set3 = set("Hello World!")
>>> print(set3)
{'o', 'H', 'W', ' ', 'd', 'r', '!', 'e', 'l'}
使用 add() 或 update() 方法向集合中添加元素:
>>> set1.add('apple')
>>> print(set1)
{'apple'}
>>> set2.update({'orange', 'pear'})
>>> print(set2)
{'apple', 'orange', 'banana', 'pear'}
使用 discard() 或 remove() 方法从集合中删除元素。
discard() 方法在元素不存在时不会引发错误,而 remove() 方法会引发错误。
>>> set1.remove('apple')
>>> print(set1)
set()
>>> set1.discard('banana')
>>> print(set1)
set()
集合提供了一种便捷的方式来处理唯一元素的集合,使其在诸如去重或成员测试等任务中非常有用。
恭喜!你已经完成了数据结构实验。
在这个实验中,你学习了 Python 的基本数据结构,以及何时以及如何使用这些数据结构来解决问题。