2017-03-12 2 views
6

Ich bin eine Reihe von Scheiben [-WINDOW-i:-i] eine Liste erstellen, in denen i Bereiche zwischen 32 und 0:Wie vermeidet man inkonsistentes s [i: -j] Slicing-Verhalten, wenn j manchmal 0 ist?

vals = [] 

for i in range(32, -1, -1): 
    vals.append(other_list[-WINDOW-i:-i]) 

Wenn i == 0, dies ein Stück Länge liefert 0:

other_list[-WINDOW-0:0] 

I don‘ t wollen dies tun, um es zu lösen:

vals = [] 

for i in range(32, -1, -1): 
    if i == 0: 
     vals.append(other_list[-WINDOW:]) 
    else: 
     vals.append(other_list[-WINDOW-i:-i]) 

... denn wenn ich viele Listen an vals anhängen muss, wird es unordentlich.

Gibt es einen sauberen Weg, dies zu tun?

+1

können Sie Ihre Eingabe und die erwartete Ausgabe hinzufügen. – putonspectacles

Antwort

7

Eine Abhilfe für diese Marotte in Python Slicing ist die Vorteile dieser Tatsachen zu nehmen:

  1. false_ish_value or other_value immer ausgewertet other_value
  2. 0 die einzige ganze Zahl ist, die false-ish in einem Booleschen Kontext ist
  3. s[n:None] entspricht s[n:]
other_list[-WINDOW-i:(-i or None)] 

... und die Scheibe wird interpretiert als [-WINDOW-i:None] (das ist die gleiche wie [-WINDOW-i:]) nur dann, wenn i (und damit -i) 0 sind: 0 Mit denen im Auge, können Sie Ihre Scheibe als schreiben.

Verwandte Themen