0
votes

Comment retourner plusieurs listes d'une fonction, conservant leurs noms?

J'ai une fonction qui crée plusieurs listes et je souhaite les retourner sur le corps principal du code avec les mêmes noms utilisés dans la fonction.

L'exemple suivant renvoie une liste concaténée puis re-crée Les listes individuelles (avec les mêmes noms utilisés dans la fonction), en analysant la liste concaténée. P>

def my_function():

    # Some code which generates multiple lists

    my_list_1 = [1, 2, 3]

    my_list_2 = ['a', 'b', 'c']

    return [my_list_1, my_list_2]

    temp = my_function()

    my_list_1 = temp[0]

    my_list_2 = temp[1]

    print (my_list_1)

    print (my_list_2)


7 commentaires

Pourquoi avez-vous besoin d'eux comme my_list1 = TEMP [0]; my_list2 = Temp [1] ? Qu'est-ce que vous allez faire avec my_list1 , my_list2 après cela? Quelle est la grande image ici?


Si une fonction renvoie une liste de 30 liste, avez-vous besoin de stocker ces 30 sublistes dans une autre liste de variables de la liste?


retour my_list1, mon _list2 et l'appelez comme my_list_1, my_list_2 = my_function ()


Han Solo - Les données dans les listes seront soumises à diverses autres fonctions, etc. Je voulais conserver leurs noms originaux, car ils sont très descriptifs de ce qui y est, pour m'aider à suivre leur utilisation dans le reste du code.


Les objets n'ont pas de noms. Les variables ont des noms, mais vous ne pouvez pas passer des variables autour. Les listes sont des objets; Ils n'ont jamais eu de noms, et vous ne pouvez pas avoir Python apporter automatiquement les noms avec les listes.


Pour plus d'informations, la fonction interroge plusieurs fichiers texte et extrait différents ensembles de données dans diverses listes. Lorsque la liste est créée, le «nom» de celui-ci décrit quelles sont les données.


@IAINMCLIDED Je nommerais bien mon conteneur, plutôt que de nommer chaque sous-mec.


4 Réponses :


0
votes

Ceci est la manière la plus pythonique: xxx


0 commentaires

0
votes

regarder dans * args et ** kwargs Si vous avez votre fonction retour [list1, list2] Vous pouvez refacturer votre code de sorte que

list1, list2 = * my_function () et ainsi de suite


0 commentaires

0
votes

Premièrement, vous n'avez pas à renvoyer une liste retour [my_list_1, my_list_2] code> mais simplement retour mon_list_1, my_list_2 code>. Cela reviendra une forte> tuple forte> de listes, c'est un meilleur moyen de retourner plusieurs choses (plus appropriées).

Pourquoi n'utilisez-vous pas la variable TEMP code> à Accès des listes, plutôt que de créer my_list_1 code>, my_list_2 code> variables? Cela étant dit, vous pouvez appeler votre fonction comme my_list_1, my_list_2 = your_function () code> si vous en avez besoin. P>

Un autre moyen est de renvoyer une dicte: retour {' my_list_1 ': my_list_1,' my_list_2 ': my_list_2} code> Ensuite, vous pouvez faire l'extrait suivant (mais il est utile lorsque les touches sont très hétérogènes et non une énumération comme my_list_n em>, L'indice serait suffisant dans ce cas). P>

returned_lists = your_function()
print(returned_lists['my_list_1'])
print(returned_lists['my_list_2'])


0 commentaires

0
votes

Si votre fonction renvoie beaucoup de résultats, vous devez envisager d'utiliser un NamedTuple xxx

Vous pouvez ensuite accéder aux résultats par leurs noms de champ xxx

consulter Les docs < / a> sur Nomples nommés


1 commentaires

Merci, l'approche "my_list_1, my_list_2 = my_list_2 = my_list ()" fonctionne bien mais nécessite toujours de "répéter" tous les noms de champs à l'extérieur de la fonction.