2013-10-08 4 views
7

Je veux avoir une variable qui est une liste imbriquée d'un certain nombre de listes vides que je peux remplir plus tard. Quelque chose qui ressemble à:Comment créer un nombre de listes imbriquées vides en python

my_variable=[[], [], [], []] 

Cependant, je ne sais pas à l'avance combien de listes je besoin, seulement à l'étape de création, donc je besoin d'une variable a pour le déterminer. J'ai pensé à my_variable=[[]]*a simple, mais cela crée des copies de listes et ce n'est pas ce que je veux avoir.

que je pouvais faire:

my_variable=[] 
for x in range(a): 
    my_variable.append([]) 

mais je suis à la recherche d'une solution plus élégante (de préférence en une ligne). Y a-t-il?

+3

Je pense que vous avez besoin de repenser cela, Cela semble qu'il pourrait être préférable d'utiliser un dictionnaire pour vos besoins. Consultez [cet article] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

+4

'my_variable = [[pour _ dans xrange (a)]' – inspectorG4dget

+4

duplication possible de [Index des listes Python] (http://stackoverflow.com/questions/13058458/python-list-index), [Problème lors de la création d'une liste de listes d'une taille donnée] (http://stackoverflow.com/q/17411892) et [pourquoi ne puis-je pas modifier un seul élément dans une liste imbriquée en Python] (http://stackoverflow.com/q/10941032) –

Répondre

12

Essayez un list comprehension:

lst = [[] for _ in xrange(a)] 

Voir ci-dessous:

>>> a = 3 
>>> lst = [[] for _ in xrange(a)] 
>>> lst 
[[], [], []] 
>>> a = 10 
>>> lst = [[] for _ in xrange(a)] 
>>> lst 
[[], [], [], [], [], [], [], [], [], []] 
>>> # This is to prove that each of the lists in lst is unique 
>>> lst[0].append(1) 
>>> lst 
[[1], [], [], [], [], [], [], [], [], []] 
>>> 

Notez cependant que le est au-dessus pour Python 2.x. En Python 3.x., depuis xrange a été enlevé, vous voulez ceci:

lst = [[] for _ in range(a)] 
+0

J'ai eu un black-out, que je n'ai pas pensé à la compréhension de la liste avant. :) Cependant, je me demande pourquoi 'xrange' sur Python 2.x est meilleur que' range'? Ils travaillent tous les deux, n'est-ce pas? –

+1

@ AndyS.c. - Pas maintenant. Dans Python 2.x, 'xrange' (qui renvoie un itérateur xrange) est plus rapide que' range' (qui retourne une liste). En Python 3.x. Cependant, 'range' a été fait pour faire ce que' xrange' fait et donc 'xrange' a été enlevé. Voici une référence: http: // stackoverflow.com/questions/135041/devrait-vous-toujours-favor-xrange-over-range – iCodez

6
>>>[[] for x in range(10)] #To make a list of n different lists, do this: 
[[], [], [], [], [], [], [], [], [], []] 

Edit: -

[[]]*10 

Cela vous donnera le même résultat que ci-dessus mais la liste sont instances non distinctes, elles ne sont que n références à la même instance.

+4

Il serait utile de démontrer en quoi cela diffère de '[[]] * 10' – inspectorG4dget

+0

ya que c'est bon.je l'ai manqué. – Nullify

+2

Envisagez d'élargir votre réponse pour expliquer au demandeur pourquoi cela permet d'obtenir le résultat souhaité, en créant éventuellement un lien vers la documentation. Tel quel, ce n'est que marginalement utile. –

Questions connexes