2017-01-06 6 views
1

Ich versuche eine Möglichkeit zu finden, ein Tupel zu einer Liste hinzuzufügen, während die Reihenfolge beibehalten wird. Zum Beispiel habe ich eine Liste. [(1, 'a'), (3, 'y'), (4, 'd')] und möchten in der Lage sein, automatisch ein weiteres Tupel einzufügen, das zum Beispiel (2, 'q') sein könnte und es automatisch zwischen (1, 'a') und (3, 'y') setzen würde Der Index.Fügen Sie ein Tupel in eine geordnete Liste ein, entsprechend einem Wert im Tupel

Vielen Dank im Voraus

+0

Haben Sie die Einfügemarke wissen vorne, oder sollte es sein basierend auf dem Wert des einzufügenden Tupels bestimmt? Mit anderen Worten, suchen Sie nach einer allgemeinen Sortierung? –

+0

Ich kenne die Einfügemarke nicht im Voraus. Also ja, ich suche nach einer allgemeinen Sortierreihenfolge. –

+0

Beantworter: Dies ist ein offensichtliches Duplikat, bitte hör auf zu antworten ... –

Antwort

0

Sie könnten das Python bisect Modul verwenden.

import bisect 

l = [(1, 'a'), (3, 'y'), (4, 'd')] 
bisect.insort(l, (2, 'q')) 

print (l) 
>> [(1, 'a'), (2, 'q'), (3, 'y'), (4, 'd')] 
-1

können Sie list.insert verwenden. Von der documentation:

Legen Sie ein Element an einer bestimmten Position. Das erste Argument ist der Index des Elements, vor dem eingefügt werden soll, also fügt a.insert (0, x) am Anfang der Liste ein und a.insert (len (a), x) entspricht a.append (x).

-Code

l = [(1, 'a'), (3, 'y'), (4, 'd')] 
l.insert(1, (2, 'q')) 

print(l) 

Ausgabe

[(1, 'a'), (2, 'q'), (3, 'y'), (4, 'd')] 

Edit: diese Antwort vorausgesetzt, dass Sie nur diese bestimmte Tupel in der Liste, so dass die neue Liste einfügen wollte bleibt von den ersten Tupelelementen in aufsteigender Reihenfolge geordnet. Ich gebe keine Lösung für den allgemeinen Fall, wenn Sie das brauchen.

0

Wenn Ihre Daten immer sortiert sind, gibt Ihnen das bisect Modul eine effiziente Möglichkeit, den Einfügepunkt zu finden.

, wenn die Zahl der Einfügemarke bestimmt können Sie einfach tun:

import bisect 

data = [(1, 'a'), (3, 'y'), (4, 'd')] 
bisect.insort(data, (2, 'q')) 
print(data) # [(1, 'a'), (2, 'q'), (3, 'y'), (4, 'd')] 

, wenn der Brief der Schlüssel zum Einfügen ist Sie eine "Zeitschrift der Buchstaben in der Liste behalten müssen:

import bisect 

data = [(1, 'a'), (3, 'y'), (4, 'd')] 
keys = [r[1] for r in data]   # precomputed list of keys 

index = bisect.bisect(keys, 'q') 

data.insert(index, (2, 'q')) 
keys.insert(index, 'q') 

print(data) # [(1, 'a'), (2, 'q'), (3, 'y'), (4, 'd')] 
print(keys) # ['a', 'q', 'y', 'd'] 

list.insert(x[, start[, end]]) wird das tatsächliche Einfügen tun.

-1

Verwendung yourlist.insert (Position, Wert)

li = [(1, 'a'), (3, 'y'), (4, 'd')] 
li.insert(1,(2,'q')) 
print "list :",li 

Ausgang:

list : [(1, 'a'), (2, 'q'), (3, 'y'), (4, 'd')]

Verwandte Themen