首页 > 解决方案 > 迭代列表末尾的连续切片时如何获取Python列表的最后一个切片

问题描述

我可能在这里大脑冻结,但是您如何遍历不确定长度列表的最后 n 个长度为 d 的切片并仍然获得最后一个切片[-d:]

我尝试了什么:

In [37]: x = list(range(100))                                                 

In [38]: window = 15                                                          

In [39]: d = window // 3                                                      

In [40]: for i in range(0, window, d): 
    ...:     print(i, x[-i-d:-i]) 
    ...:                  

输出:

0 []
5 [90, 91, 92, 93, 94]
10 [85, 86, 87, 88, 89]

我想要的是:

0 [95, 96, 97, 98, 99]
5 [90, 91, 92, 93, 94]
10 [85, 86, 87, 88, 89]

当然,问题是在最后一次迭代中,-i不是零None。我敢肯定有比这更简单的方法:

In [42]: for i in range(0, window, d): 
    ...:     if i == 0: 
    ...:         print(i, x[-i-d:]) 
    ...:     else: 
    ...:         print(i, x[-i-d:-i]) 
    ...:                     

或这个:

In [44]: import numpy as np                                                   

In [45]: np.array(x)[-window:].reshape((3,-1))                                
Out[45]: 
array([[85, 86, 87, 88, 89],
       [90, 91, 92, 93, 94],
       [95, 96, 97, 98, 99]])

标签: pythonlistslice

解决方案


正如您bool(0)可以False使用None其他绑定一样,您将获得所有切片:

for i in range(0, window, d):
    print(i, x[-i - d:-i or None])

0 [95, 96, 97, 98, 99]
5 [90, 91, 92, 93, 94]
10 [85, 86, 87, 88, 89]

推荐阅读