2017-03-12 9 views
6

tworzę kilka plasterków [-WINDOW-i:-i] o liście, gdzie i zakresy pomiędzy 32 i 0:Jak uniknąć niespójnego zachowania s [i: -j], gdy j jest czasem 0?

vals = [] 

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

Kiedy i == 0, to zwraca kawałek długości 0:

other_list[-WINDOW-0:0] 

I don” t chcesz to zrobić, aby go rozwiązać:

vals = [] 

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

... ponieważ jeśli mam wiele list do dodania do vals, to staje się brudny.

Czy jest to czysty sposób?

+1

możesz dodać swoje dane wejściowe i oczekiwane wyniki. – putonspectacles

Odpowiedz

7

Jeden obejście tego dziwactwo w Pythonie krojenie jest skorzystać z tych faktów:

  1. false_ish_value or other_value zawsze ocenia się other_value
  2. 0 jest tylko liczbą całkowitą, która jest false-ish w kontekście logicznym
  3. s[n:None] jest równy s[n:]

Z tych na uwadze, można napisać kawałek jak:

other_list[-WINDOW-i:(-i or None)] 

... i plasterek będą interpretowane jako [-WINDOW-i:None] (który jest taki sam jak [-WINDOW-i:]) tylko wtedy, gdy i (a więc -i) jest 0.