tamanho - printar elementos de uma lista python




Como obter o número de elementos em uma lista em Python? (4)

items = []
items.append("apple")
items.append("orange")
items.append("banana")

# FAKE METHOD::
items.amount()  # Should return 3

Como obtenho o número de elementos na lista?


Como obter o tamanho de uma lista?

Para encontrar o tamanho de uma lista, use a função interna, len :

items = []
items.append("apple")
items.append("orange")
items.append("banana")

E agora:

len(items)

retorna 3.

Explicação

Tudo no Python é um objeto, incluindo listas. Todos os objetos possuem um cabeçalho de algum tipo na implementação C.

Listas e outros objetos embutidos semelhantes com um "tamanho" no Python, em particular, têm um atributo chamado ob_size , onde o número de elementos no objeto é armazenado em cache. Portanto, verificar o número de objetos em uma lista é muito rápido.

Mas se você está verificando se o tamanho da lista é zero ou não, não use len - em vez disso, coloque a lista em um contexto booleano - ela é tratada como False se vazia, True em outro caso .

Dos docs

len(s)

Retorna o comprimento (o número de itens) de um objeto. O argumento pode ser uma sequência (como uma string, bytes, tupla, lista ou intervalo) ou uma coleção (como um dicionário, conjunto ou conjunto congelado).

len é implementado com __len__ , a partir dos docs modelo de dados:

object.__len__(self)

Chamado para implementar a função len() . Deve retornar o comprimento do objeto, um inteiro> = 0. Além disso, um objeto que não define um __nonzero__() [no Python 2 ou __bool__() no Python 3] e cujo método __len__() retorna zero é considerado ser falso em um contexto booleano.

E também podemos ver que __len__ é um método de listas:

items.__len__()

retorna 3.

Tipos internos você pode obter o len (comprimento) de

E, de fato, vemos que podemos obter essas informações para todos os tipos descritos:

>>> all(hasattr(cls, '__len__') for cls in (str, bytes, tuple, list, 
                                            xrange, dict, set, frozenset))
True

Não use len para testar uma lista vazia ou não vazia

Para testar um comprimento específico, é claro, basta testar a igualdade:

if len(items) == required_length:
    ...

Mas há um caso especial para testar uma lista de comprimento zero ou inversa. Nesse caso, não teste para igualdade.

Além disso, não faça:

if len(items): 
    ...

Em vez disso, simplesmente faça:

if items:     # Then we have some items, not empty!
    ...

ou

if not items: # Then we have an empty list!
    ...

Eu explico por que aqui, mas em suma, if items ou if not items é mais legível e mais performant.


A função len() pode ser usada com muitos tipos no Python - tanto tipos Python quanto tipos de biblioteca.

>>> len([1,2,3])
3

E para completar (levando um para a equipe com os downvotes), é possível sem usar a função len() (eu não aceitaria isso como uma boa opção):

def count(list):
  item_count = 0
  for item in list[:]:
    item_count = item_count + 1
  return item_count

count([1,2,3,4,5])

(os dois pontos da list[:] são implícitos, portanto também opcionais)


Embora isso possa não ser útil devido ao fato de que ele faria muito mais sentido como sendo uma funcionalidade "out of the box", um hack bastante simples seria construir uma classe com uma propriedade length :

class slist(list):
    @property
    def length(self):
        return len(self)

Você pode usá-lo assim:

>>> l = slist(range(10))
>>> l.length
10
>>> print l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Essencialmente, é exatamente idêntico a um objeto de lista, com o benefício adicional de ter uma propriedade de length compatível com OOP.

Como sempre, sua milhagem pode variar.





list