rank | vote | view | answer | url |
---|---|---|---|---|
23 | 2203 | 1237032 | 36 | url |
在嵌套列表中获取 flat list
我好奇如何可以 flat 一个嵌套列表.
我可以用 for 循环来做, 但是有没有更好的方法?我试着用 reduce , 但是失败了
Code
l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
reduce(lambda x, y: x.extend(y), l)
Error message
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
AttributeError: 'NoneType' object has no attribute 'extend'
flat_list = [item for sublist in l for item in sublist]
等价于
for sublist in l:
for item in sublist:
flat_list.append(item)
这个是完整的写法:
flatten = lambda l: [item for sublist in l for item in sublist]
可以用 timeit
module 来验证效率:
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 3: 143 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 3: 969 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 3: 1.1 msec per loop