-3
votes

Python triant deux listes ensemble?

J'ai des problèmes avec mon code ci-dessous. J'ai mes deux listes noms et scores. Ces listes correspondent à l'autre comme indiqué ci-dessous. Mon objectif est d'imprimer les trois premiers articles les plus grands des deux listes. J'ai tenté de les trier ensemble de plus au moins, puis d'imprimer les trois premiers articles, mais je reçois un peu de frais. Des pensées? Merci. xxx pré>

Exemple Sortie: P>

Spec 450
Meng 300
Sparc 200


2 commentaires

Quelle est l'erreur exacte? Il ne devrait pas y avoir rien de rien oublié ici.


Vous n'avez pas inclus l'erreur. Vous essayez de concaténer STR avec la liste qui n'est pas possible. Essayez: "" .join (carte (Str, scores [: 3])


8 Réponses :


2
votes

Le seul problème avec votre code est la partie imprimée (et vous devez inverser le tri): xxx pré>


Je vous suggère d'utiliser collections.Counter code> : P>

from collections import Counter

names = ['Xander', 'Spec', 'Meng', 'Sparc', 'Jones', 'Nick', 'Link']
scores = [120, 450, 300, 200, 66, 183, 80]

counter = Counter({name: score for name, score in zip(names, scores)})
print(counter.most_common(3))
# [('Spec', 450), ('Meng', 300), ('Sparc', 200)]


0 commentaires

0
votes

Si votre problème est dans la partie Imprimer:

for i in range(3):
    print(names[i], scores[i])


0 commentaires

0
votes

Votre impression dans la dernière ligne est fausse. Vous ne pouvez pas concaténer code> objet code> avec str code> comme ça. Faites cela à la place:

scores, names = (list(t) for t in zip(*sorted(zip(scores, names), reverse=True)))

for i in range(3):
    print(names[i], scores[i])


0 commentaires

0
votes

On dirait que vous essayez de concaténer deux listes et une chaîne dans votre relevé d'impression. La réponse de Daniel Möller est correcte. Aussi, vous devrez peut-être passer true code> à l'argument "code> inverse = code>" sinon vous obtiendrez les trois plus petits:

names = ['Xander', 'Spec', 'Meng', 'Sparc', 'Jones', 'Nick', 'Link']
scores = [120, 450, 300, 200, 66, 183, 80]

scores, names = (list(t) for t in zip(*sorted(zip(scores, names), reverse=True)))

for i in range(3):
    print(names[i], scores[i]) 

Spec 450
Meng 300
Sparc 200


0 commentaires

0
votes

Voici la solution xxx

comme modifications suggérées, cela peut être effectué d'une manière plus élégante comme celle-ci. xxx

itemGetter comme suggéré par @jab xxx


8 commentaires

Vous pouvez modifier la commande dans le code zip à (scores, noms), puis vous n'avez pas besoin de ne pas transmettre l'argument de clé dans Trier . Rien de fantaisie mais sera beaucoup plus élégant


Aussi opérateur.Itemplgeter (1) est plus préféré que lambda x: x [1] il est plus efficace et lit mieux


@mad_ Ouais qui a été utile.


@Jab opérateur.Itempstter (1) est plus lisible (ne peut pas dire sur l'efficacité), je ne veux pas inclure une bibliothèque supplémentaire, c'est pourquoi je m'envoie avec une approche de Lambda.


Opérateur est une bibliothèque intégrée et il est plus efficace et plus puissant. Voir: opérateur.itemgeter ou lambda


@Jab Yeah, tu as raison, je ne connaissais pas cette différence de performance, merci de suggérer.


Ce n'est pas que c'est une énorme différence, mais il est bon d'avoir l'habitude d'utiliser quelque chose de plus lisible et mieux surtout quand il est inclus comme intégré. lambda peut être plus rapide / plus facile à saisir mais compte de lisibilité. Et l'impact de la performation sera là quand il est nécessaire


@Jab Yeah Readabilit compte, si vous voyez la solution de jdharo opérateur.Iltemptter ou Lambda Ensuite, je pense que c'est une grande lacune de performance.



2
votes

Vous pouvez utiliser hePq.nlargest : xxx

cette sortie: xxx


0 commentaires

0
votes

Vous pouvez zip et trier les données à l'aide de opérateur.Itemplgetter code> puis imprimez les données telles que: xxx pré>

cette sortie: P>

Spec: 450
Meng: 300
Sparc: 200


0 commentaires

0
votes

Si noms code> est unique, je suggère une utilisation de dict code>, suivante: xxx pré>

sortie: p>

Spec 450
Meng 300
Sparc 200


0 commentaires