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)
归档时间: |
|
查看次数: |
4926 次 |
最近记录: |