你可以使用兩個環路與list comprehension
,它可以工作在lists
和np.arrays
:
l = [[1,1],[2,2,2]],[[3,3],[4,4],[5,5,5]]
result = [i for sublist in l for i in sublist]
print(result)
[[1, 1], [2, 2, 2], [3, 3], [4, 4], [5, 5, 5]]
如果你不熟悉list comprehension
你可以使用通常的循環(等效列表理解溶液):
newlist = []
for sublist in l:
for i in sublist:
newlist.append(i)
print(newlist)
[[1, 1], [2, 2, 2], [3, 3], [4, 4], [5, 5, 5]]
編輯:
或者你可以使用np.concatenate
或np.hstack
爲@Divakar建議這是更可讀,但性能...:
In [225]: %timeit [i for sublist in l for i in sublist]
1000000 loops, best of 3: 885 ns per loop
In [227]: %timeit np.concatenate(l)
100000 loops, best of 3: 4.12 us per loop
In [226]: %timeit np.hstack(l)
100000 loops, best of 3: 13.3 us per loop
EDIT2
從@hpaulj評論,你可以使用itertools.chain(*l)
tp實現呼叫list
:
import itertools
In [315]: list(itertools.chain(*l))
Out[315]: [[1, 1], [2, 2, 2], [3, 3], [4, 4], [5, 5, 5]]
In [317]: %timeit list(itertools.chain(*l))
1000000 loops, best of 3: 876 ns per loop
所以結果幾乎與list comprension
相同,可能會快一點。
雖然是可以做到的,使用numpy的同類型的數組'object'(無糖形狀規則行)輸大多數numpy的目的(速度,usabillity,'ufuncs'的適用性)。 –