2008-12-01 7 views

Répondre

14

Demandez-vous à ce sujet?

[ (i,j) for i in range(1,3) for j in range(1,5) ] 
+0

Oui monsieur, je le demandais. Je ne savais pas si c'était possible et quelle syntaxe utiliser, merci. –

+0

Doux! J'avais complètement manqué cette fonctionnalité. –

2

Cela semble faire ce que vous décrivez:

[[a, b] pour un dans la plage (1,3) pour b dans la plage (1,5)]

MISE À JOUR: Drat! Vous auriez dû recharger la page pour voir la réponse de S.Lott avant de poster. Hmmm ... que faire pour un peu de valeur ajoutée? Peut-être un bref témoignage de l'utilité du mode interactif avec Python. Je viens tout récemment d'un contexte avec Perl donc avec des problèmes comme celui-ci, je trouve très utile de taper "python" en ligne de commande et de passer en mode interactif et juste a) commencer à essayer des choses, et b) affiner le finesse en appuyant sur la flèche et en ajustant ma tentative précédente jusqu'à obtenir ce que je veux. Chaque fois que je suis brumeux sur un mot-clé, l'aide est à portée de main. Tapez simplement: help ("some_keyword"), lisez le bref résumé, puis appuyez sur "Q" et je suis de nouveau en ligne en conversation directe avec l'interpréteur python.

Recommandé si vous êtes un débutant et ne l'utilisez pas.

7

Le produit cartésien est dans le itertools module (2.6).

>>> import itertools 
>>> list(itertools.product(range(1, 3), range(1, 5))) 
[(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (2, 4)] 
4

Anecdote de la compréhension imbriquée: il imite imbriqué « pour » boucles, de sorte que les internes peuvent utiliser des valeurs de celles extérieures. Ce n'est pas utile dans le cas du produit cartésien, mais bon à savoir. Par exemple:

[ (i,j) for i in range(10) for j in range(i) ] 

génère toutes les paires (i,j)0>=i>j>10.

+0

Encore plus intéressant. Je vous remercie! –

Questions connexes