Em Python , a seguinte é a única maneira de obter o número de elementos?
arr.__len__()
Se sim, por que a sintaxe estranha?
my_list = [1,2,3,4,5]
len(my_list)
# 5
O mesmo funciona para tuplas:
my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5
E strings, que são realmente apenas matrizes de caracteres:
my_string = 'hello world'
len(my_string)
# 11
Foi intencionalmente feito dessa maneira, para que listas, tuplas e outros tipos de contêineres ou iteráveis não precisassem implementar explicitamente um .length()
método público ; em vez disso, você pode simplesmente verificar o len()
que implementa o __len__()
método 'mágico' .
Claro, isso pode parecer redundante, mas as implementações de verificação de comprimento podem variar consideravelmente, mesmo dentro do mesmo idioma. Não é incomum ver um tipo de coleção usar um .length()
método, enquanto outro tipo usa uma .length
propriedade, enquanto outro usa .count()
. Ter uma palavra-chave no nível do idioma unifica o ponto de entrada para todos esses tipos. Assim, mesmo objetos que você não considere serem listas de elementos ainda podem ser verificados por comprimento. Isso inclui strings, filas, árvores, etc.
A natureza funcional de len()
também se presta bem a estilos funcionais de programação.
lengths = map(len, list_of_containers)
A maneira como você escolhe um item para o qual faz sentido (uma lista, dicionário, tupla, string, ...) é invocá
len
-lo.A razão para a sintaxe "estranha" é que internamente o python se traduz
len(object)
emobject.__len__()
. Isso se aplica a qualquer objeto. Portanto, se você está definindo alguma classe e faz sentido que ela tenha um comprimento, basta definir um__len__()
método e, em seguida, é possível recorrerlen
a essas instâncias.fonte
Python usa tipagem pato : ele não se preocupa com o que um objeto é , contanto que tem a interface apropriada para a situação na mão. Quando você chama a função interna len () em um objeto, na verdade está chamando seu método interno __len__. Um objeto personalizado pode implementar essa interface e len () retornará a resposta, mesmo que o objeto não seja conceitualmente uma sequência.
Para obter uma lista completa de interfaces, consulte aqui: http://docs.python.org/reference/datamodel.html#basic-customization
fonte
A maneira preferida de obter o comprimento de qualquer objeto python é passá-lo como argumento para a
len
função. Internamente, o python tentará chamar o__len__
método especial do objeto que foi passado.fonte
Basta usar
len(arr)
:fonte
você pode usar
len(arr)
como sugerido nas respostas anteriores para obter o comprimento da matriz. Caso deseje as dimensões de uma matriz 2D, você pode usararr.shape
retornos de altura e largurafonte
len(list_name)
A função recebe a lista como parâmetro e chama a__len__()
função da lista .fonte
Python sugere que os usuários usem em
len()
vez de__len__()
consistência, assim como outros caras disseram. No entanto, existem outros benefícios:Para alguns tipos internos, como
list
,str
,bytearray
e assim por diante, a implementação Cython delen()
toma um atalho. Retorna diretamente aob_size
estrutura C, que é mais rápida do que chamar__len__()
.Se você estiver interessado em tais detalhes, poderá ler o livro "Fluent Python", de Luciano Ramalho. Existem muitos detalhes interessantes e podem ajudar você a entender o Python mais profundamente.
fonte