2016-09-15 5 views
-1
a=[[2,3],[3,4]] 
b=[[5,6],[7,8],[9,10]] 
c=[[11,12],[13,14],[15,16],[17,18]] 
c1=[[11,12],[13,14],[15,16],[17,18]] 

listr=[]   
for number in range(96): 
    listr.append(number) 

list = [[]]*96 
for e in a: 
    for f in b: 
     for g in c: 
      for h in d: 
       for i in listr: 
        list[i].append(e) 
        list[i].append(f) 
        list[i].append(g) 
print list 

Ich habe echte Schwierigkeiten mit diesem einfachen Problem. Ich möchte eine Liste von Listen aller möglichen Kombinationen aus den obigen Listen erstellen. Wenn sich die Liste wiederholt, wie in [[2,3], [5,6], [11,12], [11,12]] wäre nicht gut, wäre die erste Kombination [[2,3], [ 5,6], [11,12], [13,14]]. Das ist kein großartiger Start, aber ich weiß, dass es nicht schwer ist, aber meine Programmierfähigkeiten sind nicht stark.Erstellen einer Liste von Listen und Anhängen von Listen

würde Die endgültige Liste aussehen

[[[2,3],[5,6],[11,12],[13,14]],[[2,3],[5,6],[11,12],[15,16]],[[2,3],[5,6],[11,12],[17,18]],...,[[3,4],[9,10],[15,16],[17,18]]] 

würde ich auch zusammen, um die erste Nummer der jeweiligen Liste in jeder einzelnen Liste und fügen Sie sie gerne hinzufügen. [[31], [33], [35], ..., [44]]

+2

Haben Sie versucht [Permutationen] (https://docs.python.org/2/library/itertools.html#itertools.permutations), [Kombinationen] (https://docs.python.org/ 2/library/itertools.html # iertoolscombinations), [combinations_with_replacement] (https://docs.python.org/2/library/itertools.html#itertools.communications_with_replacement) aus dem 'itertools' Modul? – proxy

+0

c1 wird nicht verwendet. d wurde nicht erwähnt. für h in d in nutzlos. für, für .. ist viel zu lang. Bitte vermeiden Sie diese Art des Programmierstils gleich zu Beginn Ihrer Programmierreise. – chfw

+0

@chfw: Ich denke, c1 ist eigentlich d. Er hat einen Tippfehler. Scheint wie das d = [[13,14], [15,16], [17,18], [19,20]] – Joe

Antwort

2

Sie könnten itertools.product verwenden, um dies zu lösen.

Angenommen, Sie möchten Kombinationen von a, b, c und d in Gruppen von 4 (und auf der Grundlage Ihrer erwartete Ausgabe ich glaube, Sie einen Tippfehler in Ihrem c1, die ich d bin aufrufen, passen je nach Bedarf):

>>> import itertools 
>>> a = [[2, 3], [3, 4]] # are you sure this isn't actually [[1, 2], [3, 4]]? 
>>> b = [[5, 6], [7, 8], [9, 10]] 
>>> c = [[11, 12], [13, 14]] 
>>> d = [[15, 16], [17, 18]] 
>>> 
>>> list(itertools.product(a, b, c, d)) 
[([2, 3], [5, 6], [11, 12], [15, 16]), # pretty printed for readability 
([2, 3], [5, 6], [11, 12], [17, 18]), 
([2, 3], [5, 6], [13, 14], [15, 16]), 
([2, 3], [5, 6], [13, 14], [17, 18]), 
... 
([3, 4], [9, 10], [13, 14], [17, 18])] 
>>> len(list(itertools.product(a, b, c, d))) 
24 

Und btw, wenn Sie versuchen, eine Liste von int erstellen zu können, statt:

listr=[]   
for number in range(96): 
    listr.append(number) 

Sie brauchen nur das zu tun:

listr = range(96)  # in Python2 
# or 
listr = list(range(96)) # in Python3 
+0

danke für das Lesen meiner Meinung. Wie würde ich Kombinationen machen, wo ich 1 a, 2 bs, 4 cs und 1 d haben möchte? –