ich habe mehrere Listen und will das ich nur die Einträge zurück bekomme, die in allen Listen vorkommen.
Ich habe dafür zwar eine Lösung, aber diese scheint mir nicht wirklich optimal:
Code: Alles auswählen
def and_list( data ):
if len( data ) == 1:
# Es gibt nur eine, also sind alle Dateien treffer
return data.values()[0]
filelist = data.values()
print "Listen anzeigen:"
for i in filelist: print i
print "-"*80
resultlist = []
for idlist in filelist:
for id in idlist:
if id in resultlist:
# id schon vorhanden
continue
ok = True
for id2 in filelist:
if not id in id2:
ok = False
break
if ok:
resultlist.append( id )
return resultlist
data = {
"eins" : [36, 37, 38, 39],
"zwei" : [36, 37],
"drei" : [32, 33, 34, 35, 36, 37]
}
result = and_list( data )
print "Ergebnis:", result
print "-"*80
result = and_list( {"nureins":[1,2,3]} )
print "Ergebnis:", result
Die anzahl der Listen variiert und die Inhalte sind nicht unbedingt Zahlen.Listen anzeigen:
[32, 33, 34, 35, 36, 37]
[36, 37, 38, 39]
[36, 37]
--------------------------------------------------------------------------------
Ergebnis: [36, 37]
--------------------------------------------------------------------------------
Ergebnis: [1, 2, 3]
Bei meiner Lösung ist es dumm, das immer alle Einträge durchgeganen werden, obwohl dies nicht immer nötig ist. Aber ich weiß noch nicht so recht, wie man es besser Lösen könnte...