Rekursive Funktion
Verfasst: Donnerstag 22. November 2012, 15:40
Hallo ich habe mehr oder weniger ein mathematisches Problem und komme einfach nicht auf eine elegante Lösung.
Es gibt in einer Liste N Einträge, jeder der N Einträge hat eine Unterliste mit L Einträgen. Jeder Eintrag soll ein mal mit jedem anderen gelistet werden
Bsp. [[A,[a1]], [B,[b1,b2]], [C,[c1,c2]]]
Daraus soll die Liste:
[a1,[a1,b1],[a1,b2],[a1,c1],[a1,c2],[a1,b1,c1],[a1,b1,c2], [a1,b2,c1], [a1,b2,c2],b1, [b1,c1],[b1,c2],b2,[b2,c1],[b2,c2],c2]
generiert werden. Das Programm soll aber für eine beliebige Anzahl von N Einträgen funktionieren.
Ich denke mit einer rekursiven Funktion könnte man dem Herr werden, aber ich komme einfach nicht drauf wie diese aussehen muss
Seit zwei Tagen versuche ich jetzt schon eine Lösung zu programmieren, musste aber jeden Code wieder löschen…
Mein letzter Stand:
Gibt es hier Mathematik oder Programmier-Genies die mich auf die richtige Fährte bringen können bevor mein Hirn zu Staub zerfällt??
Vielen Dank
Es gibt in einer Liste N Einträge, jeder der N Einträge hat eine Unterliste mit L Einträgen. Jeder Eintrag soll ein mal mit jedem anderen gelistet werden
Bsp. [[A,[a1]], [B,[b1,b2]], [C,[c1,c2]]]
Daraus soll die Liste:
[a1,[a1,b1],[a1,b2],[a1,c1],[a1,c2],[a1,b1,c1],[a1,b1,c2], [a1,b2,c1], [a1,b2,c2],b1, [b1,c1],[b1,c2],b2,[b2,c1],[b2,c2],c2]
generiert werden. Das Programm soll aber für eine beliebige Anzahl von N Einträgen funktionieren.
Ich denke mit einer rekursiven Funktion könnte man dem Herr werden, aber ich komme einfach nicht drauf wie diese aussehen muss
Seit zwei Tagen versuche ich jetzt schon eine Lösung zu programmieren, musste aber jeden Code wieder löschen…
Mein letzter Stand:
Code: Alles auswählen
def try3():
a=['a1', 'a2', 'a3']
b=['b1','b2']
c=['c1', 'c2', 'c3']
savList=[['A', a],['B', b], ['C', c]]
entryList=[]
timesToIterate=len(savList)
#iterate over A, B, C
for iConfigs in range(timesToIterate):
#iterate over entries of A, B, C
for firstSa in range(len(savList[iConfigs][1])):
#add every single entry of A, B, C solely
entryList.append(savList[iConfigs][1][firstSa])
#if more than one entry in list (more than A) add entries of B and C and...
if timesToIterate>1:
for nextConfig in range(1,len(savList)-1):
#number of entries per Config A:3, B:2, C:3
numberSAsPerConfig=len(savList[nextConfig][1])
#do only, if not the last (this case C)
if iConfigs<timesToIterate-1:
#first add entry from first entry (A, so add a1)
appendTemp.append(savList[iConfigs][1][firstSa])
#than add all other configs
...??recursive funtion here??
...
entryList.append(appendTemp)
print str(entryList)
Vielen Dank