16 votes

Initialisation d'un tuple de listes de longueur n

Existe-t-il un moyen plus efficace et plus simple de créer un tuple de listes de longueur 'n' ?

Ainsi, en Python, si je voulais créer une liste de listes, je pourrais faire quelque chose comme :

[[] for _ in range(list_length)]

Et pour créer un tuple de listes de nature similaire, je pourrais techniquement écrire :

tuple([[] for _ in range(list_length)])

Mais est-ce que c'est inefficace du point de vue du calcul, est-ce que cela pourrait être écrit d'une manière plus agréable ?

Attention : Pour tous ceux qui pensaient que c'était une bonne idée de mettre des objets mutables tels que des listes à l'intérieur d'un tuple (immuable), il semble en fait être généralement plus rapide (en termes de calcul) d'utiliser simplement une liste (dans mon cas, une liste de listes).

1 votes

Un tuple de listes est une chose inhabituelle à vouloir, en dehors de quelques utilisations à court terme et à portée étroite, comme les arguments d'étoile de fonction. L'avantage principal d'un tuple est qu'il est immuable, pour une utilisation dans des ensembles, comme clé de dictionnaire, etc. Mais si le tuple contenu sont mutables, le tuple lui-même ne peut être utilisé en toute sécurité dans aucun de ces rôles.

0 votes

Wow, en fait (d'après mon évaluation très approximative) il faut un peu plus de temps pour créer, accéder et ajouter aux listes dans le tuple que pour faire la même chose avec une liste de listes.

19voto

Ignacio Vazquez-Abrams Points 312628

Utilisez un genex au lieu d'un LC.

tuple([] for _ in range(list_length))

1 votes

Merci ! Pour une raison quelconque, ça ne m'a pas traversé l'esprit.

6 votes

(genex signifie expression de générateur, LC signifie compréhension de liste)

10voto

Piyush Agrawal Points 81

Essayez ça :

tuple = (elements,) * list_length

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X