flat_list = [item for sublist in t for item in sublist] 5 V$ G, V- q) c* T* r' f9 E
意思是:& C; d4 J5 k, k8 L" m# y, m3 [
flat_list = []for sublist in t: for item in sublist: flat_list.append(item). d2 _3 V1 s4 W6 ]1 i
比到目前为止发布的快捷方式更快。(t列表要展平。6 M+ Q# t% w9 L4 y7 [. C
以下是对应函数:7 _; \7 x( \) G* [9 ?' l
def flatten(t): return [item for sublist in t for item in sublist]7 E X+ K F8 a$ i9 J( p, R
你可以用作证据timeit标准库中的模块:2 S5 g5 C+ c+ {0 r* s% O
$ python -mtimeit -s't=[1,2,3],[4,5,6],[7],[8,9]*99' '[item for sublist in t for item in sublist]'10000 loops,best of 3: 143 usec per loop$ python -mtimeit -s't=[1,2,3],[4,5,6],[7],[8,9]*99' 'sum(t,[])'1000 loops,best of 3: 969 usec per loop$ python -mtimeit -s't=[1,2,3],[4,5,6],[7],[8,9]*99' 'reduce(lambda x,y: x y,t)'1000 loops,best of 3: 1.1 msec per loop4 w3 g4 r; I q$ t
说明:基于 (包括 )in 隐含使用sum)快捷的方法是,O(T**2)当有 T 个子列表-随着中间结果列表越来越长,每一步都会分配一个新的中间结果列表对象,所有项目都必须复制以前的中间结果(以及一些最终添加的新结果)。因此,假设每个子列表都有 k项目:前 k 项目来回复制 T-1 次,后 k 个项目 T-2 次,以此类推;从 1 到 T 排除的 x,总副本为 x 总和的 k 倍,即k * (T**2)/2。# t2 I( m; C( I- E3 U# p& D. ^8 M6 @
列表推导式只生成一个列表,复制每个项目(从原住所到结果列表)一次。