[Python]连接列表,将多个列表连接起来
2.7 连接列表
2.7.1 使用“+”
使用 + 对多个列表进行相加。
>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>> list01 + list02 + list03
[1, 2, 3, 4, 5, 6, 7, 8, 9]
2.7.2 使用 extend
这是列表自带的一个方法,通过该方法可以实现列表的原地更新。
>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list01.extend(list02)
>>> list01
[1, 2, 3, 4, 5, 6]
2.7.3 使用列表推导式
列表推导式可谓是Python中的一大利器,对于生成列表、集合、字典都非常好用且高效。当然,使用列表推导式也能轻松连接列表:
>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>> [x for lst in (list01, list02, list03) for x in lst]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
2.7.4 使用“*”解包
在之前的Python基础
可迭代对象章节中讲到了解包,在函数中也可以通过解包的方式将可迭代对象中的元素全部取出作为参数传入函数中。
通过解包的方式,同样可以合并多个列表:
>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>> [*list01, *list02, *list03]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
2.7.5 借助 itertools
itertools 在 Python里有一个非常强大的内置模块,它专门用于操作可迭代对象。使用 itertools.chain() 函数可以将可迭代对象(在这里指的是列表)串联起来,组成一个更大的可迭代对象。最后再利用 list 将其转化为列表即可。
>>> from functools import chain
>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>> list(chain(list01, list02, list03))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
2.7.6 使用 heapq#
heapq 是 Python的一个标准模块,它提供了堆排序算法的实现。该模块里有一个 merge 方法,可以用于合并多个列表,如下所示
>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>> from heapq import merge
>>> list(merge(list01, list02, list03))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
注意:heapq.merge 除了合并多个列表外,它还会将合并后的最终的列表进行排序。
如果希望得到一个有序的列表,可以使用 heapq.merge,因为它采用堆排序,效率高。