Pyhton3(二):列表与元组

154 阅读5分钟

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区别

  1. 列表是动态的,属于可变序列,它的元素可以随时增加、修改或者删除,而元组是静态的,属于不可变序列,无法增加、删除、修改元素,除非整体替换。
  2. 列表可以使用append()extend()insert()remove()pop()等方法实现添加修改列表元素,而元组则没有这几个方法,因为不能向元组中添加和修改元素。同样,也不能删除元素,可以整体替换。
  3. 列表可以使用切片访问和修改列表中的元素。元组也支持切片,但是它只支持通过切片访问元组中的元素,不支持修改。
  4. 元组比列表的访问和处理速度快。所以如果只需要对其中的元素进行访问,而不进行任何修改,建议使用元组而不使用列表。
  5. 因为列表可以修改,元组不可以修改,因此元组比列表具有更高的安全性。
  6. 列表不能作为字典的键,而元组可以。
  7. 存储方式不同:空列表 比空元组多占用16个字节。