-
列表生成式
使用列表生成式,可以简化代码,并且不会有变量重名的烦恼(仅限于python 3.x 版本)。这也是网上流传的那些 仅凭一行Python代码却能做很多炫酷的事情 的一个重要组成部分。
In [1]: info = [i for i in range(10,50,10)]
In [2]: info
Out[2]: [10, 20, 30, 40]
-
列表切片与切片赋值
切片是以前就已经掌握了,但是切片赋值还是第一次看到。同时需要注意的是切片的这个数字,拿示例代码来说,这个数字是2
,按照我们的思维,[2:]
是到第二个停下,[:2]
是从第三个开始,这个容易记混。
In [2]: info
Out[2]: [10, 20, 30, 40]
In [3]: info[2:]
Out[3]: [30, 40]
In [4]: info[:2]
Out[4]: [10, 20]
In [5]: info[1:3] = [1, 2]
In [6]: info
Out[6]: [10, 1, 2, 40]
-
列表拆包(unpacking)
这个算是对实际写代码途中,非常方便的一个功能了,这样子就可以省掉好多行赋值语句,直接改成一行就完事了。
In [2]: info
Out[2]: [10, 20, 30, 40]
In [7]: a, b, c, _ = info
In [9]: a ,b ,c
Out[9]: (10, 1, 2)
In [10]: a, b, c, *d = info
In [11]: a ,b ,c, d
Out[11]: (10, 1, 2, [40])
-
列表的引用
这个是很容易犯错的一个地方,以为直接赋值,就可以复制一个对象过来了,而实际上只是增加了一次这个对象的引用。所以第一个方法解决方法,是info2 = info[:]
,从头到尾每个元素都复制一遍过来就好了。第二个办法就只有老老实实append
了
In [12]: info
Out[12]: [10, 1, 2, 40]
In [13]: info2 = info
In [14]: info2
Out[14]: [10, 1, 2, 40]
In [15]: info[1] = 20
In [16]: info
Out[16]: [10, 20, 2, 40]
In [17]: info2
Out[17]: [10, 20, 2, 40]
In [18]: many_info = [['_'] * 3] * 3
In [19]: many_info
Out[19]: [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
In [20]: many_info[0][0] = '1'
In [21]: many_info
Out[21]: [['1', '_', '_'], ['1', '_', '_'], ['1', '_', '_']]
-
往有序数组/序列插入一个值,并使其继续保持有序
这个用法在操作有序列表的时候非常方便,极大地减轻了工作量。
In [1]: import bisect
In [2]: a = [1, 4, 6, 8]
In [4]: bisect.insort(a, 3)
In [5]: a
Out[5]: [1, 3, 4, 6, 8]
In [6]: bisect.insort(a, 4)
In [7]: a
Out[7]: [1, 3, 4, 4, 6, 8]