In [74]: [row[2:5] for row in LoL[1:4]]Out[74]: [[2, 3, 4], [2, 3, 4], [2, 3, 4]]
您还可以通过定义以下子类来模仿NumPy的语法
list:
class LoL(list): def __init__(self, *args): list.__init__(self, *args) def __getitem__(self, item): try: return list.__getitem__(self, item) except TypeError: rows, cols = item return [row[cols] for row in self[rows]]lol = LoL([list(range(10)) for i in range(10)])print(lol[1:4, 2:5])
也产生
[[2, 3, 4], [2, 3, 4], [2, 3, 4]]
使用
LoL子类不会赢得任何速度测试:
In [85]: %timeit [row[2:5] for row in x[1:4]]1000000 loops, best of 3: 538 ns per loopIn [82]: %timeit lol[1:4, 2:5]100000 loops, best of 3: 3.07 us per loop
但是速度并不是一切-有时可读性更重要。



