Disons que j'ai une liste de 8 objets, numéroté que 1-8.
Les objets sont placés dans trois cases, 3 en une boîte, 3 dans une autre boîte, 2 dans la dernière case. Par mathématiques, il y a 8C3 * 5C3 = 560 façons de le faire. Je veux boucler de 560 objets. Y a-t-il un moyen dans Python de le faire? P>
Le résultat doit ressembler à ceci: p> Notez que Je veux faire une boucle de cette liste. Y a-t-il un moyen dans Python de le faire? P> Voici la solution que je reçois, mais cela semble laid. P> ['12', ' 345 ',' 678 '] code> et
[' 12 ',' 354 ', 876'] code> sont considérés comme les mêmes à cet effet. P>
import itertools
for c1,c2 in itertools.combinations(range(8),2):
l2=list(range(8))
l2.pop(c2)
l2.pop(c1)
for c3,c4,c5 in itertools.combinations(l2,3):
l3=l2[:]
l3.remove(c5)
l3.remove(c4)
l3.remove(c3)
c6,c7,c8=l3
print(c1,c2,c3,c4,c5,c6,c7,c8)
3 Réponses :
L serait une liste de huit objets, dans cet exemple des chaînes: produit: p>
['12', '34'] ['13', '24'] ['14', '23'] ['23', '14'] ['24', '13'] ['34', '12']
Je reçois IndexError: indice de liste hors de portée lors de l'exécution du code.
Une bonne réponse, je ne comprends pas pourquoi ce n'est pas ce qui n'est pas avancé!
Vous pouvez simplement perpercer toutes vos 8 valeurs (comme indiqué sur les réponses précédentes). Pour cela, utilisez ce Réponse précédente (aussi sur le code suivant).
Attribuez ensuite chaque combinaison en tant que tuple, elles peuvent donc être hachées et uniques, car elles devront leur commander, afin qu'ils puissent également être comparables de manière unique. P>
def all_perms(elements): if len(elements) <=1: yield elements else: for perm in all_perms(elements[1:]): for i in range(len(elements)): #nb elements[0:1] works in both string and list contexts yield perm[:i] + elements[0:1] + perm[i:] v = [1,2,3,4,5,6,7,8] a = {} for i in all_perms(v): k = (tuple(sorted([i[0],i[1]])) , tuple(sorted([i[2],i[3],i[4]])) , tuple(sorted([i[5],i[6],i[7]]))) if k not in a: a[k] = [str(i[0])+str(i[1]), str(i[2])+str(i[3])+str(i[4]), str(i[5])+str(i[6]) + str(i[7])] x = 0 for i in a.values(): print x, i x+=1
il l'a supprimé pour une raison quelconque, c'est de retour dans la question maintenant
Comment as-tu essayé de le résoudre? quel code?
Vous pourriez iTerTools docs.python.org/2/library/itétools.html et ajoutez une partie de votre propre logique.
Je dois dire que je ne comprends pas vraiment votre question.
Alors, avez-vous résolu cela?