Python中的陷阱

来源:互联网 发布:python 矩阵转图片 编辑:程序博客网 时间:2024/06/05 00:56

陷阱1:一边遍历,一边删除列表元素

可能出现问题:下标超出范围报错,或者返回结果不正确。

python 的列表遍历删除

陷阱2:b=a,修改a,结果b也被改变了。

python的内存管理机制

陷阱3:input输入一个数字,使用时发现变成了字符串。

如果想使用input()函数输入一个数值,在得到结果后需要用int()将字符串类型转换为数值类型。

陷阱4:在for循环体内改变循环变量的值,结果下次循环依然不被影响。

for i in range(3):print "original:",ii=i+3print "new",ioriginal: 0new 3original: 1new 4original: 2new 5
典型的用C语言思想,python并不买账。

陷阱5:remove是删除首个符合条件的元素,而不是根据特定索引。

>>> a=[1,2,3,1]>>> a.remove(a[-1])>>> a[2, 3, 1]>>> 
如上代码,本来是想删除最后一个元素,结果误删第一个。

而对于 del 来说,它是根据索引(元素所在位置)来删除的,如下例:

>>> a=[1,2,3,1]>>> del a[0]>>> a[2, 3, 1]

pop是根据索引,返回的是索引指向那个数值。

>>> a=[1,2,3,1]>>> a.pop(2)3

陷阱6:python中字典的items()函数返回类型为list

我们知道两个列表可直接相加,两个字典直接相加会报错。

于是想到一种相加方式:a.items()+b.items()。但是错误地得到了一个列表。

>>> a={1:2}>>> b={3:4}>>> a+bTraceback (most recent call last):  File "<pyshell#123>", line 1, in <module>    a+bTypeError: unsupported operand type(s) for +: 'dict' and 'dict'>>> c=a.items()+b.items()>>> c[(1, 2), (3, 4)]>>> type(c)<type 'list'>

正确使用方式:update()

>>> a{1: 2}>>> b{3: 4}>>> a.update(b)>>> a{1: 2, 3: 4}

陷阱7:元组或者列表加括号等于自身

>>> a=(1,2)>>> (a)(1, 2)>>> b=[1,2]>>> (b)[1, 2]>>> tuple(a)(1, 2)>>> tuple(b)(1, 2)>>> tuple([a])((1, 2),)
这告诉我们如果需要使用元祖,最好用tuple()函数转换,而不是加括号强制转化。

陷阱10:迭代器无法改变列表内容

>>> a=["1\t4","a\tb"]>>> for item in a:item = item.split("\t")>>> a['1\t4', 'a\tb']>>> for i in range(len(a)):a[i]=a[i].split("\t")>>> a[['1', '4'], ['a', 'b']]


0 0