Jul*_*ius 11 python numpy scipy
想象一下一些numpy数组,例如x = np.linspace(1,10).
x[i:j]让我了解x范围[i,j).我喜欢我也可以这样做x[i:-k],排除了最后的k元素.
但是,为了包含我需要做的最后一个元素x[i:].
我的问题是:如果我需要循环,我如何组合这两个符号k.
说我想这样做:
l = list()
for k in [5,4,3,2,1]:
l.append(x[:-k])
l.append(x[:])
Run Code Online (Sandbox Code Playgroud)
令我恼火的是最后一行.在这个简单的例子当然,它没有太大的区别,但有时这会变得更加烦人.我想念的是更像DRY的东西.
以下代码段不会产生预期的结果,但代表了我寻求的代码样式:
l = list()
for k in [5,4,3,2,1,0]:
l.append(x[:-k])
Run Code Online (Sandbox Code Playgroud)
谢谢你的支持.
Alo*_*hal 12
这是一个有点痛,但因为-0是一样的0,没有简单的解决方案.
一种方法是:
l = list()
for k in [5,4,3,2,1,0]:
l.append(x[:-k or None])
Run Code Online (Sandbox Code Playgroud)
这是因为当它k是0时,-k or None是None,并且x[:None]会做你想要的.对于其他值k,-k or None将是-k.
我不确定自己是否喜欢它.
你不能,因为-0不会在python中切片(它变为0)
你可以做旧学校:
l = list()
for k in [5,4,3,2,1,0]:
l.append(x[:len(x)-k])
Run Code Online (Sandbox Code Playgroud)
None切片中的 value与什么都不放在那里相同。换句话说,x[:None]与 相同x[:]。所以:
l = list()
for k in [-5,-4,-3,-2,-1,None]:
l.append(x[:k])
Run Code Online (Sandbox Code Playgroud)
然而……这段代码写成列表推导式要容易得多:
l = [x[:k] for k in (-5,-4,-3,-2,-1,None)]
Run Code Online (Sandbox Code Playgroud)
或者……您可能想查看您正在尝试做的任何事情,看看是否有更有意义的更高级别的抽象,或者可能只是另一种更易读的组织方式(即使它有点冗长) . 例如,根据x实际代表的内容,这可能更容易理解(当然,也可能更容易理解):
l = []
for k in range(6):
l.insert(0, x)
x = x[:-1]
Run Code Online (Sandbox Code Playgroud)