您现在的位置是:网站首页> 编程资料编程资料

一文搞懂Python中列表List和元组Tuple的使用_python_

2023-05-26 322人已围观

简介 一文搞懂Python中列表List和元组Tuple的使用_python_

列表 List

列表是任意对象的集合,在 Python 中通过逗号分隔的对象序列括在方括号 ( [] ) 中

people_list = ['曹操', '曹丕', '甄姫', '蔡文姫'] print(people_list) ['曹操', '曹丕', '甄姫', '蔡文姫'] people_list ['曹操', '曹丕', '甄姫', '蔡文姫'] 

列表是有序的

列表是对象的有序集合。定义列表时指定元素的顺序是该列表的固有特征,并在该列表的生命周期内保持不变

# 具有不同顺序的相同元素的列表是不相同的。 list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_b = ['甄姫', '蔡文姫', '曹丕', '曹操'] list_ == list_b False list_ is list_b False 

列表可以包含任意对象

列表的元素都可以是同一类型

list_ = ['曹操', '曹丕', '甄姫', '甄姫'] list_ ['曹操', '曹丕', '甄姫', '甄姫'] 

元素可以是不同的类型

list_ = [21.42, '曹操', 3, 4, '曹丕', False, 3.14159] list_ [21.42, '曹操', 3, 4, '曹丕', False, 3.14159] 

列表甚至可以包含复杂的对象(函数、类和模块)

int  len  def Dynasty_Warriors(): pass Dynasty_Warriors  import math math  list_ = [int, len, Dynasty_Warriors, math] list_ [, , ,] 

列表对象不必是唯一的。给定对象可以多次出现在列表中

list_ = ['曹丕', '甄姫', '甄姫', '曹丕', '甄姫', '曹丕'] list_ ['曹丕', '甄姫', '甄姫', '曹丕', '甄姫', '曹丕'] 

通过索引访问列表元素

像字符串一样列表索引可以使用方括号中的索引访问列表中的各个元素

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_[0],list_[2] ('曹操', '甄姫') list_[-1],list_[-2] ('蔡文姫', '甄姫') 

切片表达式 [m:n] 返回索引 m 到 n 包括索引 n 的元素。

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_[2:4] ['甄姫', '蔡文姫'] 

字符串切片的其他特性也适用于列表切片

正索引和负索引

list_[-5:-2] ['曹操', '曹丕'] list_[0:2] ['曹操', '曹丕'] list_[-5:-2] == list_[0:2] True 

省略索引开头和结束索引

print(list_[:2], list_[0:2]) ['曹操', '曹丕']['曹操', '曹丕'] print(list_[2:], list_[2:len(a)]) ['甄姫', '蔡文姫']['甄姫', '蔡文姫'] list_[:4] + list_[4:] ['曹操', '曹丕', '甄姫', '蔡文姫'] list_[:4] + list_[4:] == list_ True 

指定步幅的正负索引

list_[0:4:2] ['曹操', '甄姫'] list_[1:4:2] ['曹丕', '蔡文姫'] list_[4:0:-2] ['蔡文姫', '曹丕'] 

反转列表

list_[::-1] ['蔡文姫', '甄姫', '曹丕', '曹操'] 

运算符和内置函数处理列表

运算符 in 和 not in

list_ ['曹操', '曹丕', '甄姫', '蔡文姫'] '蔡文姫' in list_ True '曹仁' not in list_ True

连接( + )和复制( * )运算符

list_ = ['曹操', '曹丕'] list_ + ['甄姫', '蔡文姫'] ['曹操', '曹丕', '甄姫', '蔡文姫'] list_ * 2 ['曹操', '曹丕', '甄姫', '蔡文姫' '曹操', '曹丕', '甄姫','蔡文姫'] 

函数 len()、min()、max()

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] len(a) 4 min(list_ ) '曹丕' max(list_ ) '蔡文姫' 

列表嵌套

列表中的元素可以是任何类型的对象,一个列表可以包含子列表,而子列表又可以包含子列表本身,依此类推。

常规嵌套列表操作

list_ = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', ['hh', 'ii'], 'j'] ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', ['hh', 'ii'], 'j'] # list_[0], list_[2], 和list_[4]是字符串 print(list_[0], list_[2], list_[4]) a g j # list_[1]和list_[3]是子列表 list_[1] ['bb', ['ccc', 'ddd'], 'ee', 'ff'] list_[3] ['hh', 'ii'] # 访问子列表中的元素需附加索引 list_[1] ['bb', ['ccc', 'ddd'], 'ee', 'ff'] list_[1][0] 'bb' list_[1][1] ['ccc', 'ddd'] list_[1][2] 'ee' list_[1][3] 'ff' list_[3] ['hh', 'ii'] print(list_[3][0], list_[3][1]) hh ii # list_[1][1]是另一个子列表,访问需要添加索引 list_[1][1] ['ccc', 'ddd'] print(list_[1][1][0], list_[1][1][1]) ccc ddd # 索引和切片的常用语法也适用于子列表。 list_[1][1][-1] 'ddd' list_[1][1:3] [['ccc', 'ddd'], 'ee'] list_[3][::-1] ['ii', 'hh'] # in 操作符使用。 'ddd' in x False 'ddd' in x[1] False 'ddd' in x[1][1] True 

列表可变

创建列表后,可以随意添加、删除、移动和移动元素。

修改单个列表值

列表中的值可以通过索引和简单赋值进行替换。

s = '曹操,曹丕,甄姫' s[2] = '蔡文姫' Traceback (most recent call last): File "", line 1, in  TypeError: 'str' object does not support item assignment

使用 del 命令删除列表项

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] del list_[3] list_ ['曹操', '曹丕', '甄姫'] 

修改多个列表值

切片实现 a[m:n] = 序列迭代替换值

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_[1:4] ['曹丕', '甄姫', '蔡文姫'] list_[1:4] = [1.1, 2.2, 3.3, 4.4, 5.5] list_ ['曹操', 1.1, 2.2, 3.3, 4.4, 5.5] 

多个元素来代替单个元素

list_ = [1, 2, 3] list_[1:2] = [2.1, 2.2, 2.3] list_ [1, 2.1, 2.2, 2.3, 3] list_ = [1, 2, 3] list_[1] = [2.1, 2.2, 2.3] list_ [1, [2.1, 2.2, 2.3], 3] list_ = [1, 2, 7, 8] list_[2:2] = [3, 4, 5, 6] list_ [1, 2, 3, 4, 5, 6, 7, 8] 

切片分配空列表删除列表中间的多个元素

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_[1:4] = [] list_ ['曹操'] 

列表附加元素或元素附加到列表

list_ = ['曹操', '曹丕'] list_ += [ '甄姫', '蔡文姫'] list_ ['曹操', '曹丕', '甄姫', '蔡文姫'] list_ = [10, 20] + list_ list_ [10, 20, '曹操', '曹丕', '甄姫', '蔡文姫'] 

列表拼接元素的方法不能直接添加

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_ += 20 Traceback (most recent call last): File "", line 1, in  list_ += 20 TypeError: 'int' object is not iterable list_ += [20] list_ ['曹操', '曹丕', '甄姫', '蔡文姫', 20] 

append() 将对象附加到列表中

list_ = ['曹操', '曹丕'] list_.append(123) list_ ['曹操', '曹丕', 123] x = list_.append(123) print(x) None 

list.extend(),追加元素

list_ = ['曹操', '曹丕'] list_.extend([1, 2, 3]) list_ ['曹操', '曹丕', 1, 2, 3] 

list.insert(, ),插入元素

将对象插入列表

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_.insert(3, 3.14159) list_[3] 3.14159 list_ ['曹操', '曹丕', '甄姫', 3.14159, '蔡文姫'] 

list.remove(),按照元素删除元素

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_.remove('甄姫') list_ ['曹操', '曹丕', '蔡文姫'] # 如果不在中列表,则会引发异常。 list_.remove('曹丕k') Traceback (most recent call last): File "", line 1, in  list_.remove('曹丕k') ValueError: list.remove(x): x not in list 

list.pop(index=-1),按索引删除元素

从列表中删除一个元素,需要指定索引并返回被移除的项目的值,pop(-1) 等价于 pop()

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_.pop() '蔡文姫' list_ ['曹操', '曹丕', '甄姫'] list_.pop() '甄姫' list_ ['曹操', '曹丕'] 

列表是动态的,随着项目数据的变化而变化

list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] # 数据增加 list_ [2:2] = [1, 2, 3] list_ += [3.14159] list_ ['曹操', '曹丕', 1, 2, 3, '甄姫', '蔡文姫', 3.14159] # 数据删除 a = ['曹操', '曹丕', '甄姫', '蔡文姫'] a[2:3] = [] del a[0] a ['曹丕', '蔡文姫'] 

元组 Tuple

对象的有序集合,称为元组。与列表的区别在于元组是通过括号 ( () ) 而不是方括号 ( [] ) 中来定义的,以及元素不可变。

定义和使用元组

t = ('曹操', '曹丕', '甄姫', '蔡文姫') t ('曹操', '曹丕', '甄姫', '蔡文姫') t[0] '曹操' t[-1] '蔡文姫' t[1::2] ('曹丕', '蔡文姫') # 可以进行倒序排列 t[::-1] ('蔡文姫', '甄姫', '曹丕', '曹操') # 元组不可修改 t = ('曹操', '曹丕', '甄姫', '蔡文姫') t[2] = '曹丕k' Traceback (most recent call last): File "", line 1, in  t[2] = '曹丕k' TypeError: 'tuple' object does not support item assignment 

元素对比列表的优点

  • 处理速度更快
  • 防止被意外修改
  • 字典需要不可变更类型的值作为组件
# 元素用,分割 a = '曹操' b = 42 a, 3.14159, b ('曹操', 3.14159, 42) # 定义一个空的元组 t = () type(t)  # 定义项目的元组 t = (2,) type(t)  t[0] 2 t[-1] 2 # 元组单一元素会包含符号 print(t) (2,) 

元组分配、打包和解包

可以将包含多个项目的文字元组分配给单个对象。

t ('曹操', '曹丕', '甄姫', '蔡文姫') t[0] '曹操' t[-1] '蔡文姫' 

被打包的对象直接被分配新的元组中,并解释到各个元

-六神源码网