我正在尝试在python中创建以下列表列表(理想情况下使用Numpy或Pandas):
[[0,1,2,3,4,5],[1,2,3,4,5],[2,3,4,5],[3,4,5],[4,5],[5]]
。
任何人都想要快速实现这个目标吗?
答案 0 :(得分: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]]
至于做numpy
或pandas
,我不熟悉任何简单的方法,因为子列表的长度不同。
答案 1 :(得分: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