2010-11-17 8 views
2

(python)Comment parcourir toutes les valeurs possibles dans une série de listes fixes?

donc je les valeurs suivantes & listes:

name = colour 
size = ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] 
depth = ['8', '16', '32'] 
scalar = ['False', 'True'] 
alpha = ['False', 'True'] 
colour = app.Color(0.5) 

et je veux itérer sur ceux-ci pour produire toutes les combinaisons possibles avec la structure suivante:

createChannel(ChannelInfo(name, size, depth, scalar, alpha, colour)) 

si les valeurs pour le nom, la taille, etc. doivent rester au même endroit, mais elles doivent parcourir toutes les combinaisons possibles de taille, de profondeur, etc.

dire que je veux retourner quelque chose comme ceci:

createChannel(ChannelInfo('colour', 256, 8, False, True, 0.5) 
createChannel(ChannelInfo('colour1', 256, 8, False, False, 0.5) 
createChannel(ChannelInfo('colour2', 256, 16, False, False, 0.5) 

... etc ... il y a 96 combinaisons

Merci

+0

Vous implique trop de choses qui ne sont pas pertinentes pour le concept que vous voulez résoudre, et que vous n'avez pas expliqué. Je vous suggère de le nettoyer et de le présenter de façon compréhensible. –

+0

Voulez-vous dire 'name = 'colour''? – martineau

Répondre

0

J'ai eu récemment la même exigence. J'ai emprunté cette fonction inter-produit de here. Passez un ensemble de listes et il renverra un générateur qui itère tel que spécifié ci-dessus. question

+0

A partir de Python 2.6, il y a une méthode 'product()' dans le module 'intertools' qui le fait. – martineau

+0

Oui, THC4k a déjà posté cette réponse. J'ai laissé ceci ici parce que j'ai trouvé cela utile quand j'avais seulement accès à Python 2.5. –

7
import itertools 
for iter in itertools.product(size, depth, scalar, alpha): 
    print iter # prints 96 four-element tuples 
+0

Je publiais ma réponse pendant que vous publiiez ceci. Je ne connaissais pas le module itertools. c'est mieux que le mien. – Chris

1
from itertools import product 

# generates all the possible values 
combinations = product(size, depth, scalar, alpha) 
# call the function for each combination 
# i guess `names` is a list of 96 names .. 
items = [createChannel(ChannelInfo(name, *row)) 
      for name, row in zip(names, combinations)] 
+0

Je pensais qu'il y avait un paquet Python qui a fait cela. Oublie ma solution. –

Questions connexes