Python列表常见知识点及错误警示大全

Python列表常见知识点及错误警示大全

本文里面详细列举了python语言列表使用过程中可能会出现的各种问题并贴出相应实例以及正确写法,值得一看!
1.注意列表首地址与列表首元素地址不同
如下面一段代码:

a = [1, 2, 3]
print(id(a))
print(id(a[0]))

输出为:
在这里插入图片描述

2.注意Python采用的是基于值的自动内存管理方式
1)Python中的变量并不直接存储值,而是存储了值的内存地址或者引用,假如为不同变量赋值为相同值,这个值在内存中只有一份,多个变量指向同一块内存地址。
例如,执行下面代码段:

x = 2
y = 2
print(id(x))
print(id(y))

输出结果为:
在这里插入图片描述
2)而执行下面一段代码,我们发现同样元素列表地址指向了不同位置,请读者思考这是为什么?

x = [1,2]
y = [1,2]
print(id(x),id(y))

运行结果:
在这里插入图片描述
3)需要特别关注列表中remove()方法的使用!!!
列表对象的remove()方法删除首次出现的指定元素,如果列表中不存在要删除的元素,则抛出异常。例如,执行下面一段代码:

x = [1, 2, 1, 2, 1, 1, 1]
for item in x:
    if item == 1:
        x.remove(item)

读者可能会觉得,这段代码不就是删除列表中所有的1吗?但当实际执行之后,我们会惊讶地发现:
在这里插入图片描述
为什么会存在有一个1未删除的情况?这是因为在删除列表元素时,Python会自动对列表内存进行收缩并移动列表元素以保证所有元素之间没有空隙,增加列表元素时也会自动扩展内存并对元素进行移动以保证元素之间没有空隙。每当插入或删除一个元素之后,该元素位置后面所有元素的索引就都改变了。

3.善用Python切片与常用对象方法、内置函数
1)切片适用于列表、元组、字符串、range对象等类型,但作用于列表时功能最强大。可以使用切片来截取列表中的任何部分,得到一个新列表,也可以通过切片来修改和删除列表中部分元素,甚至可以通过切片操作为列表对象增加元素。切片使用2个冒号分隔的3个数字来完成:
第一个数字表示切片开始位置(默认为0)。
第二个数字表示切片截止(但不包含)位置(默认为列表长度)。
第三个数字表示切片的步长(默认为1),当步长省略时可以顺便省略最后一个冒号。

注意:切片操作不会因为下标越界而抛出异常,而是简单地在列表尾部截断或者返回一个空列表,代码具有更强的健壮性。

下面给出一些具体使用案例:
在这里插入图片描述
注意:切片返回的是列表元素的浅复制,如果原列表中包含列表之类的可变数据类型,由于浅复制时只是把子列表的引用复制到新列表中,因而修改任何一个都会影响另外一个。例如:
在这里插入图片描述
2)使用列表对象的sort()方法进行原地排序,支持多种不同的排序方法
例如:在这里插入图片描述
3)使用列表对象的reverse()方法将元素原地逆序
例如:在这里插入图片描述
4)zip()函数返回可迭代的zip对象
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。例如,执行以下代码:

aList = [1, 2, 3]
bList = [4, 5, 6]
cList = zip(aList, bList)
print(list(cList))
print([1,4] in aList )

结果为:
在这里插入图片描述
读者可能会有疑问:为什么第四行需要使用list(cList)语句,这是因为在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。

4.善用Python列表推导式
如何让你的代表具有简洁、优美(Pythonic)的特点,善用列表推导式会有很大帮助!
列表推导式使用非常简洁的方式来快速生成满足特定需求的列表,代码具有非常强的可读性。列表推导式语法形式为:

[expression for expr1 in sequence1 if condition1
            for expr2 in sequence2 if condition2
            for expr3 in sequence3 if condition3
            ...
            for exprN in sequenceN if conditionN]

列表推导式在内部实际上是一个循环结构,只是形式更加简洁!例如实现矩阵的转置功能:
在这里插入图片描述
仅两行代码便实现了这一功能,多么优美!!!

限于作者水平有限,列表中的很多知识作者还未能了解,以上内容若有误,欢迎留言或加QQ:3451707815与我交流,非常感谢您的阅读!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值