2016-07-02 22 views
7

Qual è la differenza tra singolo e doppio colon in questa situazione? data[0:,4] vs data[0::,4]Python: singolo colon vs doppio colon

women_only_stats = data[0::,4] == "female" 

men_only_stats = data[0::,4] != "female" 

ho provato a sostituire data[0::,4] con data[0:,4] e vedo alcuna differenza. C'è qualche differenza in questo o in un altro caso?

data è matrice a 2 dimensioni con righe come ['1' '0' '3' 'Braund, Mr. Owen Harris' 'male' '22' '1' '0' 'A/5 21171' '7.25' '' 'S']

risposta

5

No, non c'è differenza.

Vedere la documentazione Python per slice:

Dalla documentazione: a[start:stop:step]

L'impostazione predefinita di inizio e argomenti passo a nessuno. Gli oggetti slice hanno attributi di dati di sola lettura start, stop e step che restituiscono semplicemente i valori dell'argomento (o il loro valore predefinito).

In questo caso, si include un parametro step vuoto.

>>> a = [1,2,3,4] 
>>> a[2:] 
[3,4] 
>>> a[2::] 
[3,4] 
>>> a[2:] == a[2::] 
True 

E per capire che cosa il parametro step realmente fa:

>>> b = [1,2,3,4,5,6,7,8,9,10] 
>>> b[0::5] 
[1, 6] 
>>> b[1::5] 
[2, 7] 

Quindi, lasciando che sia implicitamente None (vale a dire, da una a[2:] o a[2::]), non si è intenzione di cambiare l'output del tuo codice in alcun modo.

Spero che questo aiuti.

0

Non c'è differenza. Stai indicizzando con un oggetto identico slice.

4

Entrambe le sintassi producono gli stessi indici.

class Foo(object): 
    def __getitem__(self, idx): 
    print(idx) 

Foo()[1::,6] 
# prints (slice(1, None, None), 6) 
Foo()[1:,6] 
# prints (slice(1, None, None), 6) 

Fondamentalmente, 1::,6 è una tupla di una fetta (1::) e un numero (6). La sezione è del formato start:stop[:stride]. Lasciando il passo falso (1::) o non affermandolo() è equivalente.

0

È così: s[start:end:step]. Slice s dall'inizio alla fine con il passaggio passaggio.

0

i dati caso è

data = ['1' '0' '3' 'Braund, Mr. Owen Harris' 'male' '22' '1' '0' 'A/5 21171' '7.25' '' 'S'] 

quindi è pari a

data = ['103Br.............7.25S'] 

In questo sitation c'è solo singolo elemento nella lista in modo dati [0] :: 4 o dati [0 : 4] non ha alcun impatto.

Se si tenta questo sarà chiaro alla tua domanda/risposta

print data[0][0::4] 
print data[0][0:4] 

Funziona come

data[start:end:step] 

Così si comporta come al solito se la dimensione del passo è inferiore lunghezza dei dati.