2016-05-17 37 views
0

Ich suche nach einer Antwort, aber ich habe nichts über mein Problem gefunden.Suche in Unterlisten und übereinstimmende Elemente mit anderen Unterlisten

x=[['100',220, 0.5, 0.25, 0.1],['105',400, 0.12, 0.56, 0.9],['600',340, 0.4, 0.7, 0.45]] 

y=[['1','100','105','601'],['2','104','105','600'],['3','100','105','604']] 

Ich will als Ergebnis:

z=[['1','100',0.5,0.25,0.1,'105',0.12,0.56,0.9],['2','105',0.12,0.56,0.9,'600',0.4,0.7,0.45],['3','100',0.5, 0.25, 0.1,'105', 0.12, 0.56, 0.9]] 

i in der Liste y und Trefferliste x mit y-Liste suchen, in dem ich eine neue Liste z erhalten, die die gemeinsame Sublisten containts. Dies ist nur ein Beispiel, enthält normalerweise Liste x und y 10000 Unterlisten.

Ich vergleiche aus y ['1', '100', '105', '601'] und suche die '100', '105', '601' in Liste x (Beispiel ['100', 220, 0,5, 0,25, 0,1]). Wenn ich eine Übereinstimmung finde, mache ich eine neue Liste z.

Kann mir jemand helfen? bearbeitet

+0

Matching auf welche Zahlen geschieht? .. bitte spezifizieren Sie die Logik zum Kombinieren der Listen – ritesht93

+0

Versuchen Sie nur die Elemente zu berechnen, die den abgeflachten Versionen der beiden Listen gemeinsam sind? –

+0

Ich möchte wieder eine verschachtelte Liste machen. –

Antwort

0

Antwort, weil Kommentare

Du hast gesagt, in den Kommentaren:

die zweite, dritte und vierte Zahl in jedem y suchen. und vergleichen Sie das mit der Nummer auf Platz eins in der Liste x

und

dann würde Ich mag hinzufügen (aus der Liste x) die Zahlen auf Platz 1,3,4,5

Dann so etwas wie dies versuchen:

x = [ 
    ['100', 220, 0.5, 0.25, 0.1], 
    ['105', 400, 0.12, 0.56, 0.9], 
    ['600', 340, 0.4, 0.7, 0.45] 
] 

y = [ 
    ['1', '100', '105', '601'], 
    ['2', '104', '105', '600'], 
    ['3', '100', '105', '604'] 
] 

z = [] 

xx = dict((k, v) for k, _, *v in x) 

for first, *yy in y: 
    zz = [first] 
    for n in yy: 
     numbers = xx.get(n) 
     if numbers: 
      zz.append(n) 
      zz.extend(numbers) 
    z.append(zz) 

print(z) 

z jetzt sein sollte:

[['1', '100', 0.5, 0.25, 0.1, '105', 0.12, 0.56, 0.9], 
['2', '105', 0.12, 0.56, 0.9, '600', 0.4, 0.7, 0.45], 
['3', '100', 0.5, 0.25, 0.1, '105', 0.12, 0.56, 0.9]] 

Zuerst habe ich konvertieren x in einem Wörterbuch, zum einfachen Nachschlagen. Das Iterationsschema hier verwendet wurde, mit pep-3132 eingeführt und funktioniert wie folgt:

>>> head, *tail = range(5) 
>>> head 
0 
>>> tail 
[1, 2, 3, 4] 
+0

Aber wenn ich dich richtig verstanden habe: suchst du nach den zweiten Zahlen in den Unterlisten von jedem y, und füge nur die kleineren von x dort hinzu? Nein, ich suche die zweite, dritte und vierte Nummer in jedem y. und vergleichen Sie das mit der Nummer an der ersten Stelle in der Liste x. –

+0

Sorry, ich bin kein Muttersprachler .. Und ich glaube, ich habe einen Fehler im Text gemacht (Sie zitiert). '' yy'' im Code enthält die zweite, dritte und vierte Zahl in jedem '' y''. wenn einer von denen ('' n'') auf Platz eins von '' x'' steht ('' Zahlen = xx.get (n) '') was machst du jetzt mit ihnen? addiere nur die kleineren Zahlen <= '' n''? – spky

+0

als ich hinzufügen möchte (aus Liste x) die Zahlen auf Platz 1,3,4,5 –

Verwandte Themen