Estou analisando alguns códigos Python e não sei o que
pop = population[:]
significa. É algo como listas de array em Java ou como um array bidimensional?
Estou analisando alguns códigos Python e não sei o que
pop = population[:]
significa. É algo como listas de array em Java ou como um array bidimensional?
Respostas:
É um exemplo de notação de fatia e o que ela faz depende do tipo de population
. Se population
for uma lista, esta linha criará uma cópia superficial da lista. Para um objeto do tipo tuple
ou a str
, não fará nada (a linha fará o mesmo sem [:]
), e para um (digamos) array NumPy, criará uma nova visualização para os mesmos dados.
l.copy()
seja mais legível, mas não funcionará.
list(l)
sempre funciona, é mais legível e com garantia de devolução de uma cópia mesmo com algo comonumpy.array
list.clear()
. Levará algum tempo, porém, até que isso leve a uma redução significativa desse tipo de perguntas sobre o SO. :)
A[deque(chain((k,), repeat(slice(None), len(A.shape) - 1)).rotate(axis)]
, quase sempre prefiro numpy.rollaxis(A, axis, 0)[k]
. Em geral, raramente me deparei com um caso de uso em que você precise criar slice()
objetos diretamente . Se você precisar deles de qualquer maneira, o NumPy fornece o s_
auxiliar como uma forma alternativa de criá-los.
Também pode ajudar saber que uma fatia da lista em geral faz uma cópia de parte da lista. Por exemplo population[2:4]
, retornará uma lista contendo população [2] e população [3] (o fatiamento é exclusivo de direito). Deixando de lado o índice da esquerda e da direita, já population[:]
que o padrão é 0 e comprimento (população) respectivamente, selecionando assim a lista inteira. Portanto, este é um idioma comum para fazer uma cópia de uma lista.
bem ... isso realmente depende do contexto. Em última análise, uma vez que passa um slice
objecto ( slice(None,None,None)
) para um dos seguintes métodos: __getitem__
, __setitem__
ou __delitem__
. (Na verdade, se o objeto tiver um __getslice__
, ele será usado em vez de__getitem__
, mas agora está obsoleto e não deve ser usado).
Os objetos podem fazer o que quiserem com a fatia.
Dentro do contexto de:
x = obj[:]
Isso irá chamar obj.__getitem__
com o objeto de fatia passado. Na verdade, isso é completamente equivalente a:
x = obj[slice(None,None,None)]
(embora o primeiro seja provavelmente mais eficiente porque não tem que procurar o slice
construtor - é tudo feito em bytecode).
Para a maioria dos objetos, essa é uma maneira de criar uma cópia superficial de uma parte da sequência.
Próximo:
x[:] = obj
É uma maneira de definir os itens (ele chama __setitem__
) com base emobj
.
e acho que você provavelmente pode adivinhar o que:
del x[:]
chamadas ;-).
Você também pode passar fatias diferentes:
x[1:4]
constrói slice(1,4,None)
x[::-1]
constrói slice(None,None,-1)
e assim por diante. Leitura adicional: Explique a notação de fatia do Python
É um corte do início ao fim da sequência, geralmente produzindo uma cópia superficial.
(Bem, é mais do que isso , mas você não precisa se preocupar ainda.)
Ele cria uma cópia da lista, em vez de apenas atribuir um novo nome para a lista já existente.
[:]
usado para limitador ou corte na matriz, hash,
por exemplo:
[1: 5] para exibir valores entre 1 inclusivo e 5 exclusivo, ou seja, 1-4
[início: fim]
basicamente usado na matriz para cortar, entender a variável de aceitação de colchetes que significa valor ou chave para exibir e ":" é usado para limitar ou dividir todo o array em pacotes.
a[1:5]
retorna os elementos 1-4, não 2-4.