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) # 抛出异常
相关文章
|
15天前
|
测试技术 数据处理 Python
Python列表推导式:简洁高效的数据处理利器
Python列表推导式:简洁高效的数据处理利器
130 80
|
21天前
|
人工智能 索引 Python
[oeasy]python094_使用python控制音符列表_midi_文件制作
本文介绍了如何使用Python控制音符列表制作MIDI文件。首先回顾了列表下标索引(正数和负数)的用法,接着通过`mido`库实现MIDI文件生成。以《两只老虎》为例,详细解析了代码逻辑:定义音高映射、构建旋律列表、创建MIDI文件框架,并将音符插入音轨。还探讨了音符时值与八度扩展的实现方法。最终生成的MIDI文件可通过不同平台播放或编辑。总结中提到,此技术可用于随机生成符合调性的旋律,同时引发对列表其他实际应用的思考。
35 5
|
3月前
|
人工智能 Python
[oeasy]python089_列表_删除列表项_remove_列表长度_len
本文介绍了Python列表(list)的操作方法,重点讲解了`remove`方法的使用。通过实例演示如何删除列表中的元素,探讨了`ValueError`异常产生的原因,并分析了时间复杂度O(n)的概念。同时提及了`clear`方法清空列表的功能及`len`函数获取列表长度的用法。最后以购物清单为例,展示列表的实际应用场景,并预告快速生成列表的方法将在后续内容中介绍。
151 62
|
1月前
|
JSON API 开发者
深入浅出:拼多多商品列表API接口Python攻略
拼多多是中国领先的社交电商平台,为开发者提供了丰富的API接口,用于集成商品数据到第三方应用。通过Python可以轻松调用这些API获取商品列表。主要步骤包括:1) 安装必要库(如`requests`);2) 使用AppKey和AppSecret获取访问令牌;3) 调用商品列表API,传入参数如商品ID、页码等;4) 解析返回的JSON数据提取所需信息。按照此流程,开发者能够快速实现与拼多多平台的数据交互。
|
1月前
|
人工智能 前端开发 数据处理
如何将Python元组转换为列表
本文介绍了在Python中将元组转换为列表的方法。通过内置的`list()`函数,可以轻松地将一个元组转换为列表。此外,文章还提供了如何使用列表推导式和`itertools.chain()`方法将包含多个元组的列表展平为单一列表的示例。这些方法对于数据处理和转换非常实用,能够帮助开发者高效操作序列类型数据。文中附有代码实例及输出结果,便于理解与实践。
|
3月前
|
人工智能 索引 Python
[oeasy]python091_列表_索引_index_中括号_索引函数
本文介绍了Python中列表与字符串的索引及index函数用法。通过range生成列表,使用索引[]访问和修改列表元素,index函数查找元素位置。字符串支持索引访问但不可直接修改。还探讨了16进制数在Python中的表示方法,以及日期、月份等特殊字符的Unicode范围。最后总结了列表与字符串操作的区别,并预告后续内容,提供蓝桥云课、GitHub和Gitee链接供进一步学习。
84 20
|
3月前
|
Python 容器
[oeasy]python090_列表_构造_范围_range_start_end_step_步长
本文介绍了Python中列表的生成方法,重点讲解了`range()`函数的使用。通过`range(start, stop, step)`可生成一系列整数,支持正负步长,但不支持小数参数。文章从基础的列表追加、直接赋值到复杂的应用场景(如生成等宽字体的月份列表),结合实例演示了`range()`的灵活性与实用性。最后总结了`range()`的关键特性:前闭后开、支持负数步长,并提供了进一步学习的资源链接。
121 15
|
3月前
|
索引 Python
[oeasy]python092_eval_衡量_转化为列表
本文探讨了 Python 中 `eval` 函数的用法及其与字符串和列表之间的转换关系。通过实例分析,展示了如何使用 `eval` 将字符串转化为对应的数据类型,例如将表示列表的字符串转回列表。同时,文章深入讲解了 `eval` 的工作机制,包括根据本地和全局变量对字符串进行计算的能力。此外,还提醒了命名变量时需避免覆盖内置类名(如 `str`、`int`、`list`)的重要性,以免影响程序正常运行。最后,简要提及字符串和列表索引中负数的应用,并为读者提供了进一步学习的资源链接。
75 2
|
3月前
|
人工智能 Python
[oeasy]python088_列表_清空列表_clear
本文介绍了Python中列表的清空方法`clear`。通过实例讲解了`clear`与将列表赋值为空列表的区别,前者会清空原列表内容,而后者创建新空列表,不影响原列表。文中以收银程序为例,展示了`clear`的实际应用场景,并通过地址观察解释了两者的机制差异。最后总结了相关术语如`list`、`append`、`clear`等,帮助理解列表操作及方法调用的概念。
76 6

推荐镜像

更多