我有一个列表,如[[1,2], [3,4], [5,6], [7,8], [9,10]]
。我想得到[1,2,3,4,5,6,7,8,9,10]
。扁平列表如果子列表长度相同
This question给出了一些非常好的平坦化列表的选项。给出的答案适用于变长子列表。尽管如此,我知道每个子列表具有相同的长度(特别是长度2)。
我想知道是否有可能利用均匀的子列表长度来改善我在链接到的问题中给出的答案。特别是,有没有什么比扁平化这个列表更好的比[item for sublist in l for item in sublist]
?
编辑:作'更好',我的意思是一个很长的名单更快。
编辑:
有一件事我没有提到 - 我不关心扁平列表的顺序(但我关心的多重度)
import timeit
import itertools
def f0():
l=[[1,2]]*99
[item for sublist in l for item in sublist]
def f1():
l=[[1,2]]*99
list(itertools.chain.from_iterable(l))
def f2():
l = [[1,2]]*99
z = map(list,zip(*l))
z[0].extend(z[1])
print timeit.timeit("f0()", setup="from __main__ import f0, f1, f2", number=10000)
print timeit.timeit("f1()", setup="from __main__ import f0, f1, f2", number=10000)
print timeit.timeit("f2()", setup="from __main__ import f0, f1, f2", number=10000)
产生输出
0.13874912262
0.103307008743
0.10813999176
我的zip
函数可以更快完成吗?
'[子列表中项目的子项列表中的项目]'将使用任意长度的一级嵌套列表。 – thefourtheye 2015-01-04 14:07:14
*“更好”*是什么意思? – jonrsharpe 2015-01-04 14:08:43
@jonrsharpe更快。名单很长,而且会发生很多。 – Joel 2015-01-04 14:10:07