mit So eine Liste b = [b1, b2, b3]
sagen, ich möchte eine Liste a
so sortieren können, dass alle bi
‚s, die auch in a
existieren haben die gleiche relative Reihenfolge wie in b
- den Rest der a
Elemente allein lassen. SoSortieren einer Untergruppe einer Python-Liste, um die gleichen relativen Reihenfolge wie in anderen Liste haben
a = [ b1, x, b3, y, b2] -> [ b1, x, b2, y, b3]
a = [ b1, x, b2, y, b3] -> no change
a = [ b1, x, y, b2] -> no change
a = [ b3, x, b1, y, b2] -> [ b1, x, b2, y, b3]
b kann natürlich ein Tupel oder jede andere geordnete Struktur sein. Was ich ist nach oben kam mit
bslots = dict((x, a.index(x)) for x in a if x in b)
bslotsSorted = sorted(bslots.keys(), key=lambda y: b.index(y))
indexes = sorted(bslots.values())
for x,y in zip(bslotsSorted, indexes):
a[y] = x
plump und O (n^2)
Beachten Sie, dass die Objekte in "b" dadurch hashfähig sein müssen. Wenn die Objekte in "b" Sätze oder Listen (usw.) sind, können Sie stattdessen die rohe "ID" als Suchwert verwenden. –