0
votes

Comment itérer à nouveau une carte sans la convertir en liste?

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


2 commentaires

le plus simple pour recréer l'objet map


cependant, pour cette application spécifique, vous pouvez heapq.nlargest (2, map (int, set (input (). split ())))


3 Réponses :


0
votes

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.

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.


0 commentaires

1
votes

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)


0 commentaires

0
votes

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)


3 commentaires

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.