基本数据类型是其它语言都必有的数据类型,但 list 数据类型在其它语言中并不一定是内置的数据类型,比如 c++ 语言,c++ 里面的 list 可以是第三方的 stl 库提供的, 也可以是程序员自己创造的一种数据类型,但是 Python 解释器内置 list 数据类型。
list 是 Python 内置的一种数据类型,list 是一种有序的集合,有序集合并不是集合里面的数据是有序的, 有序集合的意思是可以通过下标访问的集合,有序集合的概念我们在上一小节提到,在此重述一遍。
因为 python 是动态语言,定义一个 list 变量不需要显式的定义 list,list定义是用 [] 或者 list([]),我们以后习惯于直接用 [],因为书写简单易懂,[] 里面的数据是 list 的成员。
ugly_list = ["ruhua", "xingxing", "konglong"] print(ugly_list)
当然,如果 [] 里面可以不放入数据,也是一个 list,是一个空的 list。注意,空 list 是假值。
beauty_list = [] print(beauty_list) if not beauty_list: print("beauty_list 是假值")
可以通过下标来访问 list 中的成员,索引是从 0 开始的,list 是变量,我们可以通过下标修改 list 成员的值。
ugly_list = ["ruhua", "xingxing", "konglong"] print(ugly_list[0]) # 通过下标访问成员 ugly_list[1] = "zhaoritian" # 通过下标修改成员 print(ugly_list)
上节我们知道 len 函数是 Python 内置的函数,并且可以用于获取字符串长度,同样 len 函数可以获得 list 的长度。
ugly_list = ["ruhua", "xingxing", "konglong"] print(len(ugly_list))
可以通过 list 的 index 函数获取成员所在的下标, 如果指定 start 和 stop 范围,则在指定范围(左闭右开)内查找, 如果该成员不存在,则 Python 解释器抛出异常。
ugly_list = ["ruhua", "xingxing", "konglong"] print(ugly_list.index("xingxing")) # 返回下标 1 print(ugly_list.index("zhaoritian")) # 抛出异常 print(ugly_list.index("konglong", 0, 2)) # 抛出异常,因为范围在[0,2)
我们知道通过下标可以访问和修改成员的值但无法添加值, 我们可以通过 list 的 insert 函数,插入元素到 list 中的某个位置。
ugly_list = ["ruhua", "xingxing", "konglong"] ugly_list.insert(1, "zhaoritian") print(ugly_list)
可以用 list 的 pop 函数,删除所指定的索引的成员,如果索引不存在(越界),则 Python 解释器抛出异常, remove 函数可以删除指定的成员,如果该成员不存,则 Python 解释器抛出异常。
# pop 函数 ugly_list = ["ruhua", "xingxing", "konglong"] ugly_list.pop(1) # ok print(ugly_list) ugly_list.pop(10) # 抛出异常,因为索引越界 print(ugly_list) # remove 函数 ugly_list = ["ruhua", "xingxing", "konglong"] ugly_list.remove("xingxing") # ok print(ugly_list) ugly_list.remove("zhaoritian") # 抛出异常,因为成员不存在 print(ugly_list)
list 中的成员可以是任何类型,成员的数据类型也可以不同, 空 list 用 [] 表示,我们前面讲过 [] 是假值,但是 [] 不是 False 也不是 None,更不是 0 或 "",因为数据类型不同。
mylist = ["Hello", 250, [1, 2, 3]] print(mylist) otherlist = [] print(otherlist == False) # False print(not otherlist) # True
list 中的成员用逗号隔开,每个成员无论数据类型多么复杂,也只是一个成员。
mylist = ["Hello", 250, [1, 2, 3]] len_mylist = len(mylist) print(len_mylist) # 结果为 3 print(mylist[0]) # "Hello" print(mylist[2]) # [1, 2, 3] mylist[2][1] = 5 # 正确,[1, 2, 3] 是变量,里面的成员可以修改 mylist[0][1] = "F" # 错误,"Hello" 是常量,里面的成员不可修改
熟练运用操作 list 的函数。
弄明白 list 数据成员的本质。
著名公司(某团)对于以下代码,运行一下看下结果,想想为什么?(答案参考高级运算符章节的身份运算符知识点)
listone = ["Hello", 250, [1, 2, 3]] listtwo = listone listone[1] = 300 print(listtwo)
['Hello', 300, [1, 2, 3]]
listone = ["Hello", 250, [1, 2, 3]]
listtwo = listone
listone[1] = 300
print(listtwo)
运行结果:
['Hello', 300, [1, 2, 3]]
['Hello', 300, [1, 2, 3]]
['Hello', 300, [1, 2, 3]]
['Hello', 300, [1, 2, 3]]
运行结果:['Hello', 300, [1, 2, 3]]
列表list是[]
list有append()方法,增加元素
pop删除元素并带有返回值
元组tuple是()
没有增加删除方法,
如果只定义1个值需要加"," t = (1,)
a[:]是复制一个列表, 删除一个复制的列表,却变成了clear...
pop默认删除组后一个元素
["Hello",300,[1,2,3]] Python 解释器所有的变量之间赋值都是采用的浅拷贝方案,浅拷贝就是把赋值运算符(
=
)右边的变量里面所指向值的内存地址直接赋值给左边的变量。 对list进行增删改查,不会改变其已赋值的变量id