2012-05-13 13 views
21

eine Liste gegebenSlicing eine Liste über eine Variable, in Python

a = range(10) 

Sie können es drehen Aussagen wie

a[1] 
a[2:4] 

jedoch mit, ich möchte dies an anderer Stelle setzen auf eine Variable basierend tun im Code. Ich kann das leicht für den ersten tun

i = 1 
a[i] 

Aber wie mache ich das für den anderen? Ich habe versucht, Indexierung mit einer Liste:

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

Aber das funktioniert nicht. Ich habe auch versucht, mit einer Zeichenfolge:

i = "2:4" 
a[i] 

Aber das funktioniert auch nicht.

Ist das möglich?

Antwort

40

das ist, was slice() für ist:

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

aber das ist nicht wirklich so viel anders dann a[2:4] verwenden.

7

Warum muss es eine einzelne Variable sein? Verwenden Sie einfach zwei Variablen:

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

Wenn es wirklich eine einzige Variable sein muss man ein Tupel verwenden könnte.

+1

Mein Anwendungsfall beinhaltete eine detaillierte Analyse von HTML, wobei versucht wurde, das letzte Element in dieser HTML-Tabelle zu finden. Der Code sah aus wie 'last_row = list (reversed (parsed_html_rows [-2: -1]))' Im Code-Review wurde mir klar, dass ich eine Reihe dieser "Magic Ranges" im Code hatte, um verschiedene Sachen herauszupicken. Wenn man ihnen einen Namen gibt, ist es für mich und den Rezensenten einfacher. 'Last_row_indices = slice (-2, -1)' und 'last_row = list (reversed (rows [last_row_indices])) # nicht mehr darüber, warum - 2: -1' –

2

Mit den folgenden Zuweisungen verwenden Sie immer noch die gleiche Art von Slicing-Operationen, die Sie zeigen, aber jetzt mit Variablen für die Werte.

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

dann

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]