2016-04-09 9 views
0

Ich habe zwei Listen x und y:Anfügen Elemente aus Y-Liste auf eine bestimmte Liste von X Liste Python

x Liste innerhalb mehrerer Listen haben. Zum Beispiel:

x = [['1', 'hello', 'a'], ['3', 'hello', 'b'], ['11', 'hello', 'c'], ['2', 'hello', 'd'], ['4', 'hello', 'e'], ['22', 'hello', 'f']] 

y Liste ist eine einzige Liste. Die Elemente im Inneren sind URLs, die die Informationen aus jeder Liste innerhalb x Liste enthalten.

y = ['odd1', 'even2', 'odd3', 'even4', 'odd11', 'even22'] 

Ich habe die Informationen von Web Scraping. Also versuche ich einen einzelnen Artikel von y Liste zu einer einzigen Liste von x Liste anfügen. Zum Beispiel, y[0] Artikel sollte an x[0] Liste angehängt werden, aber y[1] Artikel sollte an x[3] angehängt werden.

Dies ist die Ausgabe, die ich suche:

output = [['1', 'hello', 'a', 'odd1'], ['3', 'hello', 'b', 'odd3'], ['11', 'hello', 'c', 'odd11'], ['2', 'hello', 'd', 'even2'], ['4', 'hello', 'e', 'even4'], ['22', 'hello', 'f', 'even22']] 

Ich weiß nicht, wie diese Information zu codieren. Zuerst werden die Artikel aus der y Liste sortiert, aber die Listen aus der x Liste sind nicht. Sie haben jedoch eine Pettern. Sie beginnen mit den Informationen aus ungerade Zeilen, die ich gekratzt habe, und dann die Informationen aus sogar Zeilen.

Ich habe mit diesen versucht, um x Liste an erster Stelle zu sortieren:

1. x.sort(key=int) 
2. sorted(x) | Result [['1...'], ['11...], ['2...'], ['22...'], ['3...]...] 
3. x = [int(x) for x in x] 

Wie auch immer ich ein gutes Ergebnis dont.

Für die andere Seite, ich habe versucht, die Elemente y-x Listen auf diese einfache Weise anzufügen:

for i in x: 
    i.append(y[:]) 

Obviusly, alle Artikel aus y Liste in jeder Liste von x

angehängt wurden

Wie kann ich diesen Code lösen? Vielen Dank!

Antwort

1

Versuchen Sie, diese

x = [['1', 'hello', 'a'], ['3', 'hello', 'b'], ['11', 'hello', 'c'], ['2', 'hello', 'd'], ['4', 'hello', 'e'], ['22', 'hello', 'f']] 
y = ['odd1', 'even2', 'odd3', 'even4', 'odd11', 'even22'] 
x.sort(key=lambda z: int(z[0])) 
for i in range(0, len(x)): 
    x[i].append(y[i]) 
print(x) 

Ausgang:

[['1', 'hello', 'a', 'odd1'], ['2', 'hello', 'd', 'even2'], ['3', 'hello', 'b', 'odd3'], ['4', 'hello', 'e', 'even4'], ['11', 'hello', 'c', 'odd11'], ['22', 'hello', 'f', 'even22']] 
+0

Vielen Dank für diese Lösung.Es ist großartig, @ SamuelleLEMAITRE. – estebanpdl

1
x = [['1', 'hello', 'a'], 
    ['3', 'hello', 'b'], 
    ['11', 'hello', 'c'], 
    ['2', 'hello', 'd'], 
    ['4', 'hello', 'e'], 
    ['22', 'hello', 'f']] 

y = ['odd1', 'even2', 'odd3', 'even4', 'odd11', 'even22'] 

x = sorted(x, key=lambda i: int(i[0])) 
y = sorted(y, key=lambda i: int(i.replace('even', '').replace('odd', ''))) 

print y 

result = [a + [b] for a, b in zip(x, y)] 
print result #prints out [['1', 'hello', 'a', 'odd1'], ['3', 'hello', 'b', 'odd3'], ...] 
+0

Danke, @John. Es funktioniert großartig. – estebanpdl

1

Reorder y mit

In [6]: y[::2]+y[1::2] 
Out[6]: ['odd1', 'odd3', 'odd11', 'even2', 'even4', 'even22'] 

Dann können Sie die neu geordnet y s mitpaarenzip mit:

x = [['1', 'hello', 'a'], ['3', 'hello', 'b'], ['11', 'hello', 'c'], 
    ['2', 'hello', 'd'], ['4', 'hello', 'e'], ['22', 'hello', 'f']] 
y = ['odd1', 'even2', 'odd3', 'even4', 'odd11', 'even22'] 
print([xi+[yi] for xi, yi in zip(x, y[::2]+y[1::2])]) 

ergibt

[['1', 'hello', 'a', 'odd1'], 
['3', 'hello', 'b', 'odd3'], 
['11', 'hello', 'c', 'odd11'], 
['2', 'hello', 'd', 'even2'], 
['4', 'hello', 'e', 'even4'], 
['22', 'hello', 'f', 'even22']] 
+0

Große Lösung. Einfach, eine Zeile und es funktioniert super. Danke für deine Unterstützung. – estebanpdl

Verwandte Themen