Pergunta

Eu sou um novato em Python, e este é meu primeiro post, por isso não ser muito dura :). Eu fui brincar com Python ultimamente e queria saber se algo como

max([x for x in range(25)]) 

resultaria em Python primeiro criar uma lista de todos os elementos e, em seguida, encontrar o max, resultando em O (2n) tempo, ou ele iria acompanhar o máximo como era a iteração para Θ (n). Também, desde que difere alcance em Python3 (sendo um iterable), teria que fazê-lo diferente do que em python2?

Foi útil?

Solução

O seu exemplo vai resultar em Python primeiro construir a lista inteira. Se você quiser evitar isso, você pode usar uma expressão gerador em vez disso:

max((x for x in range(25)))

ou simplesmente:

max(x for x in range(25))

Claro (em Python 2), a própria range constrói uma lista inteira, então o que você realmente quer neste caso é:

max(x for x in xrange(25))

No entanto, em relação ao tempo necessário, todas essas expressões têm a mesma complexidade. A diferença importante é que o último requer O (1) espaço, enquanto os outros exigem O espaço (n).

Outras dicas

compreensões lista Sempre gerar uma lista (a menos que algo lança uma exceção). O uso de um Genex vez é recomendada na maioria dos casos.

max(x for x in xrange(25))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top