簡體   English   中英

Python負零切片

[英]Python negative zero slicing

我經常發現自己必須處理序列中的最后n個項目,其中n可能為0.問題是嘗試用[-n:]切片在n == 0的情況下不起作用,所以很尷尬特殊情況代碼是必需的。 例如

if len(b): 
    assert(isAssignableSeq(env, self.stack[-len(b):], b))
    newstack = self.stack[:-len(b)] + a
else: #special code required if len=0 since slice[-0:] doesn't do what we want
    newstack = self.stack + a

我的問題是 - 有沒有辦法在不需要笨拙的特殊套管的情況下獲得這種行為? 如果我不必一直檢查0,代碼會簡單得多。

只是使用or合並行為。

>>> print 4 or None
4
>>> print -3 or None
-3
>>> print -0 or None
None

你可以把它從L[-2:]切換到L[len(L)-2:]

>>> L = [1,2,3,4,5]
>>> L[len(L)-2:]
[4, 5]
>>> L[len(L)-0:]
[]

當您發現自己多次使用構造時,將其轉換為函數。

def last(alist, n):
    if n:
        return alist[:-n]
    return alist

newstack = last(self.stack, len(b)) + a

EOL在評論中建議的更簡單的版本:

def last(alist, n):
    return alist[:-n] if n else alist[:]

由於雙反轉,這可能是非常低效的,但希望有一些想法可以反轉序列以使索引更容易:

a = [11, 7, 5, 8, 2, 6]

def get_last_n(seq, n):
    back_seq = seq[::-1]
    select = back_seq[:n]
    return select[::-1]

print(get_last_n(a, 3))
print(get_last_n(a, 0))

返回:

[8, 2, 6]
[]

你可以在那里放一個條件

L[-i if i else len(L):]

我認為這個版本不太清楚。 你應該在旁邊使用評論

L[-i or len(L):]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM