python - 如何在迭代列表末尾的连续切片时获取 Python 列表的最后一个切片

标签 python list slice

我可能在这里脑子一片空白,但是如何迭代不确定长度列表的最后 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]])

最佳答案

由于 bool(0)False,您可以使用 None 作为其他绑定(bind),您将获得所有切片:

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]

关于python - 如何在迭代列表末尾的连续切片时获取 Python 列表的最后一个切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58864597/

相关文章:

python - 如何监控python的concurrent.futures.ProcessPoolExecutor?

python - 在 Python 中定义 GLib.Variant

python - 如何在 Anaconda (Windows 10) 上安装 textract?

json - 解码字符串和整数的 slice

python - 关于在Python中以特定顺序打印列表中的多个项目的问题

r - 将摘要(aov()) 的嵌套列表中的值提取到数据框中

python - 从两个列表中创建一个新列表,其中一个列表缺少数据 - 只应接受有效的对应值

c - 请帮帮我,我想显示链接列表,反转它并显示然后再次显示它

python - 我可以在 Python 列表中创建 "view"吗?

pointers - 复制一片指针(指向新值)