La liste des éléments est là en tant qu'objet de carte. Je dois répéter ceci 2 fois pour obtenir une réponse. Est-ce possible sans conversion en liste?
if __name__ == '__main__':
arr = map(int, input().split())
large = 0
for item in arr:
if item > large:
large = item
print(large)
second = 0
for item in arr:
if item < large and item > second:
second = item
print(second)
Le résultat attendu pour une entrée de "2 3 4 6 6" est 6 4
Le résultat du code ci-dessus est 6 0
3 Réponses :
De la documentation de map : Renvoie un itérateur qui applique une fonction à chaque élément d'itérable, donnant les résultats. Les itérateurs sont à sens unique, il y a une autre question sur la" réinitialisation "des itérateurs, la meilleure réponse est d'expliquer pourquoi cela peut être une mauvaise idée .
Comme vous utilisez input () , pas un fichier, il ne sera pas possible de recréer l'itérateur de la même manière, donc le meilleur moyen est de faire une liste. p >
Cependant, en regardant votre code, vous pourrez faire la chose en un seul passage. ;) - Je ne publierai pas de code car il ressemble à un exercice de codage, seulement une explication comment faire cela: utilisez déjà deux variables (ou un tuple à 2 éléments ou une liste à 2 éléments) lors de la première exécution. Le nouveau nombre est plus grand que les deux? Modifiez les deux valeurs. Un nouveau numéro est entre eux? Changer seulement le 2e.
Ce code reproduit le comportement de votre code en une seule boucle.
if __name__ == '__main__':
arr = map(int, input().split())
large = 0
second = 0
for item in arr:
print('%s %s %s %s %s' %(item, large, second, item < large, item > second))
if item > large:
second = large
large = item
elif item < large and item > second:
second = item
print(large)
print(second)
Nous pouvons parcourir une boucle unique et nous devons supposer max et second max comme premier élément que 0 car les éléments du tableau peuvent également être négatifs
if __name__ == '__main__':
arr = map(int, input().split())
large = arr[0]
second_large = arr[0]
for item in arr:
if item > large:
large = item
if item < second_large:
second_large = item
print(large, second_large)
l'objet map ne peut pas être appelé avec des index .. corrigez-moi si je me trompe .. large = arr [0] générera une erreur ..
arr contient un tableau, la carte renvoie un tableau pour que vous puissiez accéder à un [0]
arr contient un tableau, la carte renvoie un tableau afin que vous puissiez accéder à un [0]. Nous utilisons la fonction map afin de pouvoir appliquer la fonction apply à chaque élément d'un tableau. Ici, input (). Split () renvoie un tableau de chaînes et nous convertissons chaque élément du tableau en entier afin que nous puissions trouver le premier et le deuxième maximum.
le plus simple pour recréer l'objet
mapcependant, pour cette application spécifique, vous pouvez
heapq.nlargest (2, map (int, set (input (). split ())))