Sto analizzando del codice Python e non so cosa
pop = population[:]
si intende. È qualcosa come gli elenchi di array in Java o come un array bidimensionale?
Sto analizzando del codice Python e non so cosa
pop = population[:]
si intende. È qualcosa come gli elenchi di array in Java o come un array bidimensionale?
Risposte:
È un esempio di notazione slice e ciò che fa dipende dal tipo di population. Se populationè un elenco, questa riga creerà una copia superficiale dell'elenco. Per un oggetto di tipo tupleo a str, non farà nulla (la riga farà lo stesso senza [:]), e per un (diciamo) array NumPy, creerà una nuova visualizzazione degli stessi dati.
l.copy()è più leggibile, ma non funzionerà.
list(l)funziona sempre, è più leggibile ed è garantito per restituire una copia anche con qualcosa di similenumpy.array
list.clear(). Ci vorrà del tempo, tuttavia, prima che ciò porti a una significativa riduzione di questo tipo di domande sull'SO. :)
A[deque(chain((k,), repeat(slice(None), len(A.shape) - 1)).rotate(axis)], preferirei quasi sempre numpy.rollaxis(A, axis, 0)[k]. In generale, raramente mi sono imbattuto in un caso d'uso in cui avresti bisogno di creare direttamente slice()oggetti. Se ne hai comunque bisogno, NumPy fornisce l' s_helper come un modo alternativo per crearli.
Potrebbe anche essere utile sapere che una sezione di elenco in generale fa una copia di una parte dell'elenco. Ad esempio population[2:4], restituirà un elenco contenente la popolazione [2] e la popolazione [3] (il taglio è esclusivo a destra). Tralasciando l'indice sinistro e destro, poiché population[:]sono predefiniti rispettivamente a 0 e lunghezza (popolazione), selezionando così l'intero elenco. Quindi questo è un linguaggio comune per creare una copia di un elenco.
beh ... questo dipende davvero dal contesto. Alla fine, passa aslice oggetto ( slice(None,None,None)) per uno dei seguenti metodi: __getitem__, __setitem__o __delitem__. (In realtà, se l'oggetto ha un __getslice__, verrà usato al posto di __getitem__, ma ora è deprecato e non dovrebbe essere usato).
Gli oggetti possono fare quello che vogliono con la fetta.
Nel contesto di:
x = obj[:]
Questo chiamerà obj.__getitem__con l'oggetto slice passato. In effetti, questo è completamente equivalente a:
x = obj[slice(None,None,None)]
(anche se il primo è probabilmente più efficiente perché non deve cercare il slicecostruttore - È tutto fatto in bytecode).
Per la maggior parte degli oggetti, questo è un modo per creare una copia superficiale di una parte della sequenza.
Il prossimo:
x[:] = obj
È un modo per impostare gli elementi (chiama __setitem__) in base a obj.
e, penso che tu possa probabilmente indovinare cosa:
del x[:]
chiama ;-).
Puoi anche passare diverse fette:
x[1:4]
costruisce slice(1,4,None)
x[::-1]
costrutti slice(None,None,-1)e così via. Ulteriori letture: Spiega la notazione slice di Python
È una fetta dall'inizio alla fine della sequenza, che di solito produce una copia superficiale.
(Beh, è più di questo , ma non devi ancora preoccupartene.)
Crea una copia dell'elenco, anziché semplicemente assegnare un nuovo nome per l'elenco già esistente.
[:]
usato per limitatore o affettamento in array, hash
ad esempio:
[1: 5] per visualizzare valori tra 1 incluso e 5 esclusivo cioè 1-4
[inizio: fine]
fondamentalmente usato nell'array per affettare, capire la parentesi accetta la variabile che significa valore o chiave da visualizzare e ":" viene utilizzato per limitare o suddividere l'intero array in pacchetti.
a[1:5]restituisce gli elementi 1-4, non 2-4.