6.Python【序列】- 列表

简介: 6.Python【序列】- 列表

认识列表

列表(list) 是可变序列,是Python 最基本的数据结构之一,常用于存放同类项目的容器。Python对列表元素的类型没有严格的限制,每个元素可以是不同的类型。但是从代码的可读性和执行效率考虑,建议统一列表元素的数据类型。

列表具有如下特点。

  • 列表是有序的数据结构。内部数据的位置排列固定。
  • 通过下标索引访问内部数据。支持迭代和切片操作。
  • 列表是可变的数据类型。可以随意添加、删除和更新内部数据,列表会自动伸缩,确保内部数据无缝隙有序排列。
  • 内部数据统称为元素,元素的值可以重复,可以为任意类型的数据,如数字、字符串、列表、元组、字典和集合等。
  • 列表的字面值:在中括号内存放所有元素,元素之间使用逗号分隔。

构建列表

以中括号作为起始和终止标识符,其中包含零个或多个元素,元素之问通过逗号分隔。如果不包含任何元素,则表示一个空列表对象。语法如下:

[元素1,元素2,元素3,...,元素n]

使用list构造器可以将可迭代对象转换为列表,语法如下:

list()
list(iterable)

如果不包含任何参数,将创建一个空列表。构造器将构造一个列表,其中的项与 iterable 中的项具有相同的值与顺序。iterable可以是序列、支持选代的容器,或者其他可选代对象。

list1 = [] # 定义空列表
list2 = [1,2,3] # 直接定义列表
list3 = ['a',2,3] # 不同类型列表
list4 = list([1,2,3]) # 列表转列表
list5 = list((1,2,3)) # 元组转列表
list6 = list(range(1,4)) # 数字范围转列表
list7 = list({'a':1,'b':2,'c':3}) # 字典转列表 ['a','b','c']
list8 = list({1,2,3}) # 集合转列表
list9 = list('123) # 字符串转列表
list10 = list() # 空列表

列表推导式

推导式又称解析式,是可以从容器构建另一个新的数据容器的结构体,语法简洁,运行速度快,性能比循环好,列表推导式的语法格式如下:

[expr for value in iterable if condition]
# 类似于 for 循环结构
result = []        # 定义一个空列表
for value in iterable: # 遍历iterable迭代器对象
    if condition:      # 如果条件表达式为True
        result.append(expression) # 把该元素的值添加到列表中

其中,expr 表示一个表达式,value 表示与iterable 包含元素相关的值表达式,iterable 表示一个可迭代的对象,condition 表示要过滤的条件。过滤条件可选,取决于实际应用。

l1 = [i for i range(10)]
print(l1) # 输出[0,1,2,3,4,5,6,7,8,9]
l2 = [[i,char] for i,char in enumerate('python')]
print(l2) # 输出[[0,'p'],[1,'y'],[2,'t'],[3,'h'],[4,'o'],[5,'n']]

(1) for 循环前面加 iterable这种形式生成的元素个数不会少,只是根据 for 循环的结果使用不同的表达式。

(2) for 循环后面加 if。这种形式只选择符合条件的元素,所以元素个数与系件相关。

(3) 嵌套 for 循环。

l3 = [i if i%2 == 0 else 0 for i in range(10)]
print(l3) # 输出[0,0,2,0,4,0,6,0,8,0]
l4 = [i for in range(10) if i%2 == 0]
print(l4) # 输出[0,2,4,6,8]
m = [[1,2,3],[4,5,6],[7,8,9]] 
n = [col for row in m for col in row] # 嵌套for
print(n) # 输出[1,2,3,4,5,6,7,8,9]
n = [] # 定义临时列表
for row in m: # 遍历外层列表
    for col in row: # 遍历内层列表
        n.append(col) # 把元素添加到临时列表中
print(n) # 输出[1,2,3,4,5,6,7,8,9]
name = ['Bob','Tom',alice','Jerry','Wendy','Smith']
l5 = [name.upper() for name in names if len(name) > 3] # 先条件过滤,然后转换为大写
print(l5) # 输出['ALICE','JERRY','WENDY','SMITH']


操作列表

访问元素

访问元素,顾名思义就查看列表中元素,常见的有赋值和切片操作。

list 表示列表对象,index 表示下标索引,index 起始值为0,第一个元素的下标为0,最后一个元素的下标为len(list)-1。其中,len()函数可以统计列表元素的个数。

index 可以为负值,负值素列表示从右往左数,由-1开始,-1表示最后一个元素,负列表长度表示第一个元素。访问元素的语法格式如下:

list[index]
list1 = [1,2,3]
print(list1[-1]) # 输出 3

赋值或更新元素,value 为要赋的值,类型不限,index 不能超出索引范围,

list[index] = value

使用count()方法可以统计列表中指定元素出现的次数,如果不存在,则返回0。

list1 = [1,2,3,4,1,1]
print(list1.count(1)) # 输出 3
print(list1.count(5)) # 抛出异常

使用index()方法可以获取指定元素的下标索引。

list 表示列表对象,参数value 表示元素的值。start 和stop 为可选参数,start 表示起始检索的位置,包含start 所在位置,stop 表示终止检索的位置,不包含stop 所在的位置。

index()方法将在指定范围内,从左到石查找第一个匹配的元素,然后返回它的下标索引值。

list.index(value,start,stop)
list1 = [1,2,3,4,5,5,4,3,2,1,4,2,4]
print(list1.index(4,7,12)) # 输出 10
print(list1.index(20)) # 抛出异常

切片访问元素。

list 表示列表对象;start index:表示开始索引位置,默认为 0,包含该索引位置;end index:表示结束索引位置,默认为序列长度 len(sequence),不包含该索引位置;step:表示步长,默认为 1,但是不能为 0。

list[start_index:end_index:step]
list1 = [3,4,5,6,7,8,9,11,13,15,17]
print(list1[::]) # 输出所有元素
print(list1[::-1]) # 倒序元素
print(list1[100]) # 抛出异常
print(list1[100:]) # [] 空列表
print(list1[:100:1]) # 超出范围的显示 [] 空列表

如果指定下标超出列表的索引范围或者指定的元素不存在,将会抛出异常。但切片操作不会因为下标超出而抛出异常,而是简单地在序列尾部截断或者返回一个空序列。

遍历元素

遍历就是对列表中每个元素执行一次访问,常用于数据过滤处理。

使用whilelen()函数可以遍历列表。

list1 = ['a','b','c']
i = 0
while i < len(list1):  # 遍历列表
    list[i] = list1[i].upper() # 读取每个元素,然后转换为大写形式,再写入
    i += 1 # 下标自增
print(list1) # 输出 ['A','B','C']

for 主要用于遍历可选代对象,该语句语法简洁,且运行高效。item 引用每个元素,iterable 表示可迭代对象。当遍历所有元素之后,for 自动停止迭代。具体语法格式如下:

for item in iterable:
    # 处理语句
list1 = ['a','b','c']
for in list1: # 遍历列表
    list1[list1.index(i)]=i.upper  # 读取每个元素,然后转换为大写形式,再写入
print(list1) # 输出 ['A','B','C']
list2 = ['a','b','c','d']
for index,value in enumerate(list1): # 遍历enumerate元素
    list1[index] = value.upper() # 读取每个元素,然后转换为大写形式,再写入
print(list2) # 输出 ['A','B','C','D']
 

添加元素

使用append()方法可以再当前列表尾部追加元素,该方法执行效率高。list 表示对象,参数obj表示要添加到列表末尾的值。该方法在原列表上执行操作,没有返回值,语法如下:

list.append(obj)

list1 = ['a','b','c']
list1.append('d') # 追加一个元素
print(list1) # 输出['a','b','c','d']

使用extend()方法可以将一个可选代对象的所有元素添加到当前列表对象的尾部。通过extend()方法增加列表元素也不会改变当前列表对象的内存地址,属于原址操作。

a = [1,2,4]
print(id(a)) # 内存地址:878351704712
a.extend([7,8,9]) # 追加序列
print(a) # 输出[1,2,4,7,8,9]
print(id(a))# 内存地址:878351704712
 

使用列表对象的insert()方法可以将元素添加到指定下标位置。参数 index 表示插入的索引位置;obj 表示要插入列表中的对象。该方法没有返回值,只是在原列表指定位置插入对象。语法格式如下:

list.insert(index, obj)
a = [1,2,3,4]
print(id(a)) # 内存地址:47959883021
a.insert(3,6) # 下标为3的位置插入6
print(a) # 输出[1,2,3,6,4]
print(id(a))# 内存地址:47959883021

使用切片

list1 = [3,5,7]
list1[len(list1):]=[9] # 在尾部追加元素
list1[:3] = [1,2,3] # 替换前3各元素

删除元素

使用del命令可以刪除列表中指定位置的元素。

a = [1,2,3,4]
del a[2]
print(a) # 输出 [1,2,4]

使用pop()方法可以刪除并返回指定位置上的元素。语法格式如下:

list.pop(index=-1)

参数 index 表示要移除列表元素的索引值,默认值为-1,即删除最后一个列表值。如果给定的索引值超出了列表范围,将抛出异常。

a = [1,2,3,4]
e = a.pop() # 删除最后一个元素
print(a) # 输出 [1,2,3]
print(e) # 输出 4

使用remove()方法删除首次出现的指定元素。参数 obj 表示列表中要移除的对象,即列表元素的值。该方法没有返回值,如果列表中不存在要刷除的元素,则抛出异常。语法如下:

list.remove(obj)

a=[1,2.2,2,2,3,4,2,3,2,4]
for i in a[::]:  # 遍历切片
    if 2 == i: # 设置删除条件
        a.remove(i) # 刷除元素2
print(a) # 输出为 [1,3,4,3,4]
for i in range(len(a)-1,-1): # 从后往前检查
    ifa[i] == 2: # 设置删除条件
        del a[i] # 删除元素2
print(a) # 输出为 [1,3,4,3,4]

使用clear()方法可以删除列表中所有元素。该方法没有参数,也没有返回值。

a = [1,2,3,4]
a.clear()
print(a)

使用切片

list1 = [3,5,7,9,11]
del list1[:3] # 删除前3各元素
list1[:] = [] # 删除所有元素

复制列表

浅复制就是只复制列表对象的浅层关系,不再深入复制每个值所引用的对象。

import copy 
x = [1,2,[3,4]]
y = copy.copy(x) # copy()函数浅复制
print(id(x[2])) # 内存地址:2891781245440
print(id(y[2]))# 内存地址:2891781245440

深复制将会递归复制对象的所有子对象。使用copy模块的deepcopy()函数可以执行深复制。

import copy 
x = [1,2,[3,4]]
y = copy.deepcopy(x) # deepcopy()函数浅复制
print(id(x[2])) # 内存地址:2891781245440
print(id(y[2]))# 内存地址:2438547682368

使用切片,这也是浅复制

x = [1,2,[3,4]]
y = x[:]
print(id(x[2])) # 内存地址:2891781245440
print(id(y[2]))# 内存地址:2891781245440

删除列表

使用del命令可以删除列表。

list1 = [1,2,3]
del list1 # 删除列表
print(list1) # 抛出异常
相关文章
|
1天前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
20 9
|
9天前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
22 14
|
11天前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
28 10
|
28天前
|
数据处理 开发者 Python
Python中的列表推导式:简洁高效的数据处理
在编程世界中,效率和可读性是代码的两大支柱。Python语言以其独特的简洁性和强大的表达力,为开发者提供了众多优雅的解决方案,其中列表推导式便是一个闪耀的例子。本文将深入探讨列表推导式的使用场景、语法结构及其背后的执行逻辑,带你领略这一特性的魅力所在。
|
1月前
|
开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第41天】 在编程的世界中,效率与简洁是永恒的追求。本文将深入探讨Python编程语言中一个独特且强大的特性——列表推导式(List Comprehension)。我们将通过实际代码示例,展示如何利用这一工具简化代码、提升性能,并解决常见编程问题。无论你是初学者还是资深开发者,掌握列表推导式都将使你的Python之旅更加顺畅。
|
1月前
|
Python
探索Python中的列表推导式
【10月更文挑战第38天】本文深入探讨了Python中强大而简洁的编程工具——列表推导式。从基础使用到高级技巧,我们将一步步揭示如何利用这个特性来简化代码、提高效率。你将了解到,列表推导式不仅仅是编码的快捷方式,它还能帮助我们以更加Pythonic的方式思考问题。准备好让你的Python代码变得更加优雅和高效了吗?让我们开始吧!
|
29天前
|
JavaScript 前端开发 算法
python中的列表生成式和生成器
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生的天地。通过自学前端技术2年半,现正向全栈开发迈进。如果你从我的文章中受益,欢迎关注,我将持续更新高质量内容,你的支持是我前进的动力!🎉🎉🎉
23 0
|
1月前
|
Python
SciPy 教程 之 SciPy 模块列表 16
SciPy教程之SciPy模块列表16 - 单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了力学单位的使用,如牛顿、磅力和千克力等。
20 0
|
1月前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy 教程之 SciPy 模块列表 15 - 功率单位。常量模块包含多种单位,如公制、质量、时间等。功率单位中,1 瓦特定义为 1 焦耳/秒,表示每秒转换或耗散的能量速率。示例代码展示了如何使用 `constants` 模块获取马力值(745.6998715822701)。
16 0
|
1月前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy教程之SciPy模块列表15:单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。功率单位以瓦特(W)表示,1W=1J/s。示例代码展示了如何使用`constants`模块获取马力(hp)的值,结果为745.6998715822701。
19 0
下一篇
DataWorks