2017-01-03 98 views

回答

7
>>> [range(i,6) for i in range(6)] 
[[0, 1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [2, 3, 4, 5], [3, 4, 5], [4, 5], [5]] 

至於這樣做numpypandas,我不熟悉這樣做的任何簡單的方法,因爲子列表的長度不同。

+0

好吧,是的,我在想有什麼東西要與實現對角陣列,但您的解決方案是完美的。 –

+0

是的,熊貓數據框需要一個類似於表格的數據結構,而不是這個不平衡的列表。我熟悉numpy數組,但我認爲一個簡單的python列表效果最好。 –

2

您可以創建一個範圍列表並簡單地切片以獲得每個子列表。這個想法是爲了提高效率而在循環理解中最小化工作。

因此,實現將是 -

def reducing_ranges(n): 
    r = range(n) 
    return [r[i:] for i in r] 

採樣運行 -

>>> reducing_ranges(6) 
[[0, 1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [2, 3, 4, 5], [3, 4, 5], [4, 5], [5]] 

運行測試 -

In [38]: %timeit [range(i,6) for i in range(6)] # @Akavall's soln 
100000 loops, best of 3: 2.65 µs per loop 

In [39]: %timeit reducing_ranges(6) 
100000 loops, best of 3: 1.75 µs per loop 

In [40]: %timeit [range(i,1000) for i in range(1000)] # @Akavall's soln 
100 loops, best of 3: 9.96 ms per loop 

In [41]: %timeit reducing_ranges(1000) 
100 loops, best of 3: 2.96 ms per loop