Python 内置的一些数据结构
文章目录
- 1. 列表 (List)
- 1.1 列表的切片
- 1.2 列表推导式(List Comprehensions)
- 基本语法
- 包含条件的列表推导式
- 多重循环
- 优点
- 注意事项
- 2. 元组 (Tuple)
- 3. 字典 (Dictionary)
- 4. 集合 (Set)
- 5. 字符串 (String)
Python 提供了几种内置的数据结构来存储和操作数据,每种都有其独特的特点和用途。下面是一些常用的数据结构及其简要说明:
1. 列表 (List)
列表是一种可变的有序集合,可以存放任意类型的数据。列表中的元素可以通过索引访问,索引从0开始。
特点:
- 可变性:可以添加、删除或修改元素。
- 异质性:列表中的元素可以是不同类型的数据。
- 有序性:元素有固定的顺序。
示例:
my_list = [1, "two", 3.0]
1.1 列表的切片
在 Python 中,列表支持切片操作,它允许你通过指定起始索引和结束索引来获取列表的一个子集。基本格式为 list[start:end]
,其中 start
是子列表的第一个元素的索引(包含),end
是子列表最后一个元素之后的索引(不包含)。 # 注意是索引 , 索引从0开始
-
如果省略
start
,则默认从列表的开始位置开始; [:n] -
如果省略
end
,则默认到列表的结束位置为止。 [n:] -
举个例子,如果
a = [1, 2, 3]
:len(a)
返回 3,表示a
有三个元素。a[3:]
在这里意味着从索引 3 开始直到结束的所有元素,但实际上这是一个空切片,因为索引 3 已经超出了当前列表的范围。a[3:] = [4]
将会把[4]
放入这个空切片的位置,结果就是a
变成[1, 2, 3, 4]
。
1.2 列表推导式(List Comprehensions)
Python 中一种简洁而强大的创建列表的方法。它允许你通过一个表达式和一个循环来生成一个新的列表,通常还可以包含条件语句。列表推导式可以看作是 (一个或多个)for 循环和(一个或多个) if 语句的结合,用于生成列表的元素。
基本语法
列表推导式的语法结构如下:
[expression for item in iterable if condition]
expression
:用于生成列表中每个元素的表达式。item
:循环变量,代表iterable
中的每个元素。iterable
:一个可迭代对象,如列表、元组、字符串等。if condition
:可选的条件语句,用于过滤元素。
示例
假设我们要创建一个列表,其中包含 0 到 9 的每个数字的平方。可以使用以下列表推导式:
squares = [x**2 for x in range(10)]
这行代码等价于以下的 for 循环:
squares = []
for x in range(10):squares.append(x**2)
两者都会生成相同的列表 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
。
包含条件的列表推导式
列表推导式还可以包含条件语句,例如,如果我们只想包含偶数的平方,可以这样做:
even_squares = [x**2 for x in range(10) if x % 2 == 0]
这将生成 [0, 4, 16, 36, 64]
,因为只有偶数的平方才会被包含在列表中。
多重循环
列表推导式还可以包含多个 for 循环,例如,创建一个二维列表:
matrix = [[x * y for x in range(3)] for y in range(3)]
这将生成一个 3x3 的矩阵:
[[0, 0, 0],[0, 1, 2],[0, 2, 4]]
优点
- 简洁性:列表推导式通常比等价的 for 循环更简洁。
- 易读性:当逻辑简单时,列表推导式可以提高代码的可读性。
- 效率:在某些情况下,列表推导式比等价的 for 循环更快,因为它们是用 C 语言编写的底层实现。
注意事项
- 列表推导式在处理大量数据时可能会消耗大量内存,因为它会一次性生成整个列表。
- 如果逻辑复杂,使用 for 循环可能更易读和维护。
列表推导式是 Python 中非常有用的功能,它使得创建和操作列表变得更加简单和高效。
2. 元组 (Tuple)
元组也是一种有序集合,但它一旦创建后就不能修改,即它是不可变的。
特点:
- 不可变性:不能添加、删除或修改元素。
- 异质性:元组中的元素也可以是不同类型的数据。
- 有序性:元素有固定的顺序。
示例:
my_tuple = (1, "two", 3.0)
3. 字典 (Dictionary)
字典是一种可变的无序集合,它通过键值对来存储数据,每个键都唯一对应一个值。
特点:
- 可变性:可以添加、删除或修改键值对。
- 键的唯一性:每个键都是唯一的,不允许重复。
- 无序性:Python 3.7之前,字典的元素是没有顺序的;从Python 3.7开始,由于实现的变化,字典保持了元素插入的顺序。
示例:
my_dict = {"one": 1, "two": 2, "three": 3}
4. 集合 (Set)
集合是一个无序且不包含重复元素的集合。
特点:
- 无序性:集合中的元素没有固定的顺序。
- 无重复性:集合内的元素都是唯一的,不允许重复。
示例:
my_set = {1, 2, 3, 3} # 重复的3会被忽略
print(my_set) # 输出: {1, 2, 3}
5. 字符串 (String)
虽然字符串通常被认为是基本数据类型,但在很多方面它们也表现得像一个数据结构,因为它们是由字符组成的序列。
语法:
- 标注
可以用双引号”Hello World“
也可用单引号'Hello World'
#两种都可以用,可以根据串内是否有单双引号来决定用哪个(避免语义冲突)
>>> 'doesn\'t' #有语义冲突就 用转义字符 \
"doesn't"
>>> "doesn't" # ...or use double quotes instead
"doesn't">>> '"Yes," he said.'
'"Yes," he said.'
>>> "\"Yes,\" he said."
'"Yes," he said.'>>> '"Isn\'t," she said.'
'"Isn\'t," she said.'
- 连接 与 切片
可用+ 连接字符串,也可用索引的方式获得字符串切片(字符就是最小的字符串)
字符串可以由 + 操作符连接(粘到一起),可以由 * 表示重复
也可通过索引获得字符串片段 s[0:5]
特点:
- 不可变性:字符串一旦创建就不可更改。
- 有序性:字符串中的字符有固定的顺序。
示例:
my_string = "hello"
以上就是Python中常用的几种数据结构。每种结构都有自己的优势和最佳使用场景,选择合适的数据结构对于编写高效和易于维护的代码至关重要。