1
resposta

Ordem dos parâmetros necessariamente idêntica

Gostaria de entender melhor por que a ordem das variáveis passadas para o for deve ser exatamente a mesma ordem dos passada para a zip().

#Caso correto

for nome, km in zip(nomes, kms):
    if(km < 20000):
        print(nome)
________________________________________________

Passat
Crossfox
C4

#Caso incorreto

for km , nome, in zip(nomes, kms):
    if(km < 20000):
        print(nome)
_________________________________________

TypeError                                 Traceback (most recent call last)
<ipython-input-99-e6f814ff6e6b> in <module>
      3 
      4 for km, nome in zip(nomes, kms):
----> 5     if(km < 20000):
      6         print(nome)

TypeError: '<' not supported between instances of 'str' and 'int'

A princípio não vejo relação entre as duas funções, a menos que a zip() retorne com um preenchimento das variáveis do for na ordem em que as recebeu. Faz sentido essa hipótese?

1 resposta

Olá Erick, belezinha?

A ordem dos paramentos passados dever ser a mesma ordem que o zip. No nosso caso se deixar zip(nomes, kms) então ele ira retorna o nome primeiro e depois o km.

No caso das variáveis, que estão no for no exemplo nome, km são apenas nomes que utilizamos para facilitar o entendimento. Pois o nome é o primeiro valor que vem do zip e o km é o segundo valor. Porem podemos escolher qualquer nome para essas variáveis, o que importa é o valor que tem nela, que é determinado pela ordem que esta no zip, por exemplo :

nomes = ['Passat', 'Crossfox', 'DS5', 'C4', 'Jetta']
kms = [15000, 12000, 32000, 8000, 50000]

for km, nome in zip(nomes, kms):
        print(nome)

Saída 15000 12000 32000 8000 50000

Se você inverter a ordem das variáveis no for, para km, nome a ordem dos valores ira continuar o mesmo, pois a ordem que esta no zip é nomes,kms .

No seu caso você fez isso, porem como você não alterou a ordem no zip estará tentando comparar uma string com um inteiro, o que gera o erro que você mencionou. Lembre-se o que importa é a ordem do zip.

Espero ter solucionado sua duvida. Mas se ainda tiver alguma, estou por aqui. Ótimos estudos e um forte abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!