É um exemplo de notação de fatia e o que ela faz depende do tipo de population. Se populationfor uma lista, esta linha criará uma cópia superficial da lista. Para um objeto do tipo tupleou 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.
@ilius: Talvez l.copy()seja mais legível, mas não funcionará.
Sven Marnach
13
list(l)sempre funciona, é mais legível e com garantia de devolução de uma cópia mesmo com algo comonumpy.array
Rosh Oxymoron
1
@Eli: Sim, ao lado list.clear(). Levará algum tempo, porém, até que isso leve a uma redução significativa desse tipo de perguntas sobre o SO. :)
Sven Marnach
1
@MichaelGraczyk: Presumo que você esteja falando sobre matrizes NumPy aqui. Em vez de usar 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.
Sven Marnach
27
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 sliceobjecto ( 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:
[:]
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.
Não há razão para esbarrar em uma questão tão antiga que já tem 5 respostas semelhantes e até mesmo uma aceita ... Além disso, a[1:5]retorna os elementos 1-4, não 2-4.
Skamah One
@SkamahOne Oh, não sei. Talvez não neste caso, mas há momentos em que pode ser útil levantar questões mortas. Percepções diferentes, palavras diferentes, etc. Nesse caso, você corrigiu a resposta e, com sorte, eles também aprenderam algo.
Respostas:
É um exemplo de notação de fatia e o que ela faz depende do tipo de
population
. Sepopulation
for uma lista, esta linha criará uma cópia superficial da lista. Para um objeto do tipotuple
ou astr
, 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.fonte
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 prefironumpy.rollaxis(A, axis, 0)[k]
. Em geral, raramente me deparei com um caso de uso em que você precise criarslice()
objetos diretamente . Se você precisar deles de qualquer maneira, o NumPy fornece os_
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.fonte
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:
Isso irá chamar
obj.__getitem__
com o objeto de fatia passado. Na verdade, isso é completamente equivalente a:(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:
É uma maneira de definir os itens (ele chama
__setitem__
) com base emobj
.e acho que você provavelmente pode adivinhar o que:
chamadas ;-).
Você também pode passar fatias diferentes:
constrói
slice(1,4,None)
constrói
slice(None,None,-1)
e assim por diante. Leitura adicional: Explique a notação de fatia do Pythonfonte
É 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.)
fonte
Ele cria uma cópia da lista, em vez de apenas atribuir um novo nome para a lista já existente.
fonte
[:]
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.
fonte
a[1:5]
retorna os elementos 1-4, não 2-4.