列表(list) 是一组有序数据的 可变 集合。
列表的字面量使用方括号([]
)包裹一组值表示,例如:
students:list[str] = ["Tom", "Jerry", "Spike"]
digraph {
node [shape=plaintext, fontcolor=red, fontsize=18];
"列表:" -> "索引:" [color=white];
node [shape=record, fontcolor=black, fontsize=14, width=4.75, fixedsize=true];
values [label="<f0> Tom | <f1> Jerry | <f2> Spike", color=blue, fillcolor=lightblue, style=filled];
indices [label="0 | 1 | 2 ", color=white];
{ rank=same; "列表:"; values }
{ rank=same; "索引:"; indices }
edge [color=blue];
}
类型标注 list[str]
,表示类型为 元素类型为 str
的列表
列表的元素类型可以不同,例如:
ages:list[int|str] = [15, "16", 17]
类型标注 list[int|str]
,表示类型为 元素类型为 int
或 str
的列表
如果没有合理的理由,请不要使用元素类型不定的列表
列表和元组一样,通过列表后跟方括号([]
)索引访问元素,索引从 0 开始,并且列表的元素是可以修改的:
Python 提供了多种方式向列表插入元素,主要包括 append
、insert
和 extend
:
append
- 在末尾追加元素
insert
- 在指定位置插入元素
extend
- 将另一个列表合并到末尾
示例:
Python 提供了多种方式向列表插入元素,主要包括 pop
和 remove
:
pop
- 删除指定索引的元素,不指定索引则删除末尾的元素
remove
- 删除第一个等于指定值的元素
示例:
通过 clear
方法可以清空列表:
通过 sort
方法可以对列表进行排序:
Python 的 所有类型都是引用类型,如果将一个变量赋值给另一个变量,它们将引用同一份实体。参考 Python 官方文档 - 可变序列
因此,对于列表而言,通过任意一个变量修改列表都会影响到另一个变量:
digraph G {
node [shape=record, fontname="Courier", fontsize=14];
rankdir=LR;
data [label="值 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]"];
numbers [label="变量 numbers"];
shadow [label="变量 shadow"];
numbers -> data [label="引用"];
shadow -> data [label="引用"];
}
之前学习的基本类型和元组都属于不可变类型,对他们的修改实际上是创建了一个新的对象。参考 Python 官方文档 - 不可变序列
因此,引用同一个实体的对象之间不会感知到互相影响:
digraph G {
rankdir=LR;
subgraph cluster_1 {
label = "After";
svalue [label="值 11"];
nvalue [label="值 10"];
shadow2 [label="变量 shadow"];
number2 [label="变量 number"];
shadow2 -> svalue [label="引用"];
number2 -> nvalue [label="引用"];
}
subgraph cluster_0 {
label = "Before";
value [label="值 10"];
number [label="变量 number"];
shadow [label="变量 shadow"];
number -> value [label="引用"];
shadow -> value [label="引用"];
}
}
如果想要两个列表互不影响,就需要创建新的列表:
通过内建函数 len
可以获得元组和列表的长度。
示例: