J'étudie Python, mais je suis devenu accro et je suis resté coincé pendant environ une heure. Je l'ai résolu pour le moment, mais je ne peux pas m'empêcher, mais si quelqu'un comprend ce mécanisme, je vous serais reconnaissant si vous pouviez m'apprendre, alors je l'écrirai.
Ce qui suit est un programme qui mélange des joueurs de Los Angeles et de New York et les divise en bloc A et bloc B en combinant les noms de joueurs et les blocs.
groupLeague.py
import itertools
LA = [('Jake', 'B'), ('Elwood', 'A')]
NY = [('James', 'A'), ('Carry', 'B'), ('Steven', 'B')]
data = itertools.chain(LA, NY)
def getSortKey(item):
return item[1]
grp = itertools.groupby(sorted(data, key=getSortKey(data), getSortKey(data))
Mais quand je fais ça, TypeError: 'itertools.chain' object is not subscriptable Sera joué avec une erreur.
Je ne l'ai pas compris du tout, et j'étais vraiment dedans, mais quand j'ai regardé un autre exemple de programme et que je l'ai revu, cela a fonctionné. Dans la dernière ligne,
grp = itertools.groupby(sorted(data, key=getSortKey(data)), getSortKey(data))
,
grp = itertools.groupby(sorted(data, key=getSortKey), getSortKey)
Et, à l'exception de l'argument de getSortKey, cela fonctionnait normalement.
Le programme a fonctionné pour le moment, mais je n'ai aucune idée de ce mécanisme. Je comprends que vous pouvez spécifier une "fonction qui peut obtenir une clé" en plus de la valeur de clé comme deuxième argument "partie clé" de groupby, mais lorsque vous spécifiez une fonction, pourquoi n'avez-vous pas besoin d'écrire un argument? Ou est-ce une erreur si j'écris un argument? ?? Pour autant que je puisse confirmer l'opération, je pense que le premier argument "partie itérable" (triée ~) est automatiquement traité comme un argument, mais il n'y avait pas une telle description dans le document.
【référence】 Documentation Python itertools --- Fonction de génération Itertool pour une exécution de boucle efficace
Il en va de même pour la fonction triée. Dans la partie de key = getSortkey, l'argument semble prendre automatiquement les données du premier argument, mais je ne comprends pas le mécanisme (le document ne l'a pas mentionné après tout).
【référence】 Fonctions intégrées de la documentation Python triées
Quel genre de mécanisme est-ce sans prendre d'argument ...? ?? Je l'ai recherché, mais je ne pouvais tout simplement pas le comprendre. Je suis vraiment désolé que ce soit une question rudimentaire, mais si vous le savez, ce serait grandement apprécié si vous pouviez m'apprendre.
Comment gérer ce genre de spécification délicate?
Recommended Posts