我有一個列表,如[[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