2016-11-03 3 views
1

Say habe ich eine Liste von Listen von Listen etc ... von einiger Tiefe:Python Shop Scheibe Index als Objekt

ExampleNestedObject = numpy.ones(shape = (3,3,3,3,3)) 

Im Allgemeinen mir ein Element durch Schreiben bekommen kann:

#Let: 
#a, b, c, d, e -> are integers 

print ExampleNestedObject[a][b][c][d][e] 

#numpy also happens to allow: 

print ExampleNestedObject[(a,b,c,d,e)] 

#python in general allows: 

print ExampleNestedObject[a,b,:,d,e] 

Meine Frage ist -> Wie kann ich den Index "a, b,:, d, e" als Objekt speichern?

SomeSliceChoice = a,b,:,d,e 

print ExampleNestedObject[SomeSliceChoice] 
+1

ich eine numpy spezifische Version dieser Frage sehen hier: http : //stackoverflow.com/questions/6795657/numpy-arr0-works-but-how-do-i-store-the-data-contained-in-the-slice-co? rq = 1 Obwohl ich immer noch an einer generischen Python-Lösung interessiert sind –

+0

numpy Arrays sind keine Listen. –

+1

Diese Lösung ist generisch. –

Antwort

1

Der Trick besteht darin, sich ein Indexobjekt als Tupel von Scheibenobjekten vorzustellen.

Example1:

Object[1,2,:] == Object[(1,2,slice(None,None,None))] 

Example2:

WantedSliceObject = (1,2,slice(None,None,None), 4,5) 
Object[1,2,:,4,5] == Object[WantedSliceObject] 

Beachten Sie die Syntax von '' 'Scheibe:

#slice(start, stop[, step]) 

#1 == slice(1, 2, 1) 

WantedSliceObject2 = (
    slice(1, 2, 1), 
    slice(2, 2, 1), 
    slice(None,None,None), 
    slice(4, 2, 1), 
    slice(5, 2, 1) 
    ) 

#WantedSliceObject2 == WantedSliceObject