list
列表是由一系列特定顺序排列的元素组成
创建列表
注意:列表的数据项不需要具有相同的类型
list1 = ['Google', 'Runoob', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
访问列表索引值
注意:索引值以 0 为开始值,-1 为从末尾的开始位置,-2则为倒数第二个的位置,其他同理。
list = ['red', 'green', 'blue', 'yellow', 'white', 'black']
print( list[0] ) # red
print( list[MinusOne] ) # black
更新列表
可以直接通过列表的索引访问对应列表上的元素
list = ['Google', 'Runoob', 1997, 2000]
list[2] = 2001
print ("更新后的第三个元素为 : ", list[2]) # 2001
添加列表元素
在末尾添加
使用append()函数在末尾添加
list = ['Google', 'Runoob', 'Taobao']
list.append('Baidu')
print ("更新后的列表 : ", list) # 更新后的列表 : ['Google', 'Runoob', 'Taobao', 'Baidu']
这个例子中新增了一个元素'Taobao'到列表的末尾
在指定位置插入
使用insert()可在列表的任何位置添加新元素。为此,需要指定新元素的索引和值
list = ['Google', 'Runoob', 'Taobao']
list.insert(0, 'Baidu')
print ("更新后的列表 : ", list) # 更新后的列表 : ['Baidu', 'Google', 'Runoob', 'Taobao']
这个例子中插入了一个元素'Baidu'到列表的开头
删除列表元素
直接删除
可以使用del指定列表索引直接删除对应索引位置上的元素
list = ['Google', 'Runoob', 1997, 2000]
del list[2]
print ("删除第三个元素 : ", list) # 删除第三个元素 : ['Google', 'Runoob', 2000]
这个例子删除了对应索引位置为2的元素
删除后获取该值
使用pop()删除列表末尾的元素,并获取这个元素的值
list = ['Google', 'Runoob', 'Taobao']
r = list.pop()
print("删除的值: ", r) # 删除的值: Taobao
print("更新后的列表 : ", list) # 更新后的列表 : ['Google', 'Runoob']
或者,指定索引位置,删除指定索引位置的元素,并获取这个元素的值
list = ['Google', 'Runoob', 'Taobao']
r = list.pop(2)
print("删除的值: ", r) # 删除的值: Taobao
print("更新后的列表 : ", list) # 更新后的列表 : ['Google', 'Runoob']
根据值删除元素
使用remove()根据元素的值删除元素
list = ['Google', 'Runoob', 'Taobao']
list.remove('Taobao')
print("更新后的列表 : ", list) # 更新后的列表 : ['Google', 'Runoob']
这个例子我们删除了第一个值为Taobao的元素
注意:remove()只删除第一个指定的值的元素,如果指定的值在列表中出现多次,则可能需要循环删除
切片
处理列表中的部分元素
[n:m]
访问列表索引 n到m-1的元素
list = ['Google', 'Runoob', 1997, 2000]
print("指定的列表: ", list[0:2]) # 指定的列表: ['Google', 'Runoob']
这个例子我们打印出了列表中索引位置0到1的列表
原理
列表实现可以是数组和链表。
- 顺序表一般是数组。
- 列表是一个线性的集合,它允许用户在任何位置插入、删除、访问和替换元素。
- 列表实现是基于数组或基于链表结构的。当使用列表迭代器的时候,双链表结构比单链表结构更快。
- 有序的列表是元素总是按照升序或者降序排列的元素。
从细节上看,Python中的列表是由对其它对象的引用组成的连续数组。指向这个数组的指针及其长度被保存在一个列表头结构中。这意味着,每次添加或删除一个元素时,由引用组成的数组需要该标大小(重新分配)。幸运的是,Python在创建这些数组时采用了指数分配,所以并不是每次操作都需要改变数组的大小。但是,也因为这个原因添加或取出元素的平摊复杂度较低。
Tuple
Python 的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号 ( ) ,列表使用方括号 [ ] 。
创建元组
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
tup1 = ('Google', 'Runoob', 1997, 2000)
tup2 = (1, 2, 3, 4, 5 )
tup3 = "a", "b", "c", "d" # 不需要括号也可以
访问元组
元组可以使用下标索引来访问元组中的值
tup = ('Google', 'Runoob', 1997, 2000)
print ("元组值: ", tup[0]) # 元组值: Google
修改元组
元组中的元素值是不允许修改的,但可以对元组进行连接组合
tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
tup3 = tup1 + tup2
print("新的元组: ", tup3) # 新的元组: (12, 34.56, 'abc', 'xyz')
删除元组
元组中的元素值是不允许删除的,但可以使用del语句来删除整个元组
tup = ('Google', 'Runoob', 1997, 2000)
del tup
print ("删除后的元组 tup : ", tup)
# Traceback (most recent call last):
# File "main.py", line 18, in <module>
# print("删除后的元组 tup : ", tup)
# NameError: name 'tup' is not defined
list和Tuple区别
- 列表是动态的,属于可变序列,它的元素可以随时增加、修改或者删除,而元组是静态的,属于不可变序列,无法增加、删除、修改元素,除非整体替换。
- 列表可以使用
append()、extend()、insert()、remove()和pop()等方法实现添加和修改列表元素,而元组则没有这几个方法,因为不能向元组中添加和修改元素。同样,也不能删除元素,可以整体替换。 - 列表可以使用切片访问和修改列表中的元素。元组也支持切片,但是它只支持通过切片访问元组中的元素,不支持修改。
- 元组比列表的访问和处理速度快。所以如果只需要对其中的元素进行访问,而不进行任何修改,建议使用元组而不使用列表。
- 因为列表可以修改,元组不可以修改,因此元组比列表具有更高的安全性。
- 列表不能作为字典的键,而元组可以。
- 存储方式不同:空列表 比空元组多占用16个字节。