2012-05-13 12 views
21

Dato un elencoAffettare un elenco utilizzando una variabile, in Python

a = range(10) 

È possibile tagliare utilizzando affermazioni come

a[1] 
a[2:4] 

Comunque, io voglio fare questo in base a una variabile set altrove nel codice. Posso facilmente farlo per il primo

i = 1 
a[i] 

Ma come faccio a fare questo per l'altro? Ho provato l'indicizzazione con un elenco:

i = [2, 3, 4] 
a[i] 

Ma questo non funziona. Ho anche provato a usare una stringa:

i = "2:4" 
a[i] 

Ma anche questo non funziona.

È possibile?

risposta

40

questo è quello che è per slice():

a = range(10) 
s = slice(2,4) 
print a[s] 

ma che non è proprio così molto diverso quindi utilizzando a[2:4].

7

Perché deve essere una singola variabile? Basta usare due variabili:

i, j = 2, 4 
a[i:j] 

Se davvero bisogno di essere una singola variabile è possibile utilizzare una tupla.

+1

Il mio caso d'uso ha comportato un parsing dettagliato di html, cercando di trovare l'ultimo elemento in questa tabella html. Il codice sembrava 'last_row = elenco (invertito (parsed_html_rows [-2: -1]))' Nella revisione del codice ci siamo resi conto che avevo un certo numero di questi "intervalli magici" nel codice per cogliere varie cose. Dare un nome a loro rende più facile per me e il revisore .. 'last_row_indices = slice (-2, -1)' e 'last_row = elenco (invertito (righe [last_row_indices])) # non più wtf'ing sul perché - 2: -1' –

2

Con gli incarichi riportati di seguito si sta ancora utilizzando lo stesso tipo di operazioni di segmentazione che si mostrano, ma ora con variabili per i valori.

a = range(10) 
i = 2 
j = 4 

poi

print a[i:j] 
[2, 3] 
2
>>> a=range(10) 
>>> i=[2,3,4] 

>>> a[i[0]:i[-1]] 
range(2, 4) 

>>> list(a[i[0]:i[-1]]) 
[2, 3] 
Problemi correlati