2009-08-22 12 views
0

Angenommen, ich eine Struktur wie diese:Transforming verschachtelte Liste in Python

a = [ 
('A', 
['D', 
    'E', 
    'F', 
    'G']), 
('B', 
['H']), 
('C', 
['I']) 
] 

Wie kann ich verwandeln es in:

a = [ 
('A', 'D'), 
('A', 'E'), 
('A', 'F'), 
('A', 'G'), 
('B', 'H'), 
('C', 'I'), 
] 

Vielen Dank für Ihre Zeit!

+0

Da dies Hausaufgaben sind, warum machst du nicht einen Versuch, dies zuerst zu schreiben, und vielleicht werden wir helfen, deine Bemühungen zu korrigieren. – Triptych

+0

@Trip: wie können Sie sagen, ob eine Frage Hausaufgaben ist? (ernsthafte Fragen) –

+0

Es ist keine Hausaufgaben ... –

Antwort

4

Hier ist eine einfache Lösung:

data = [ 
('A', 
    ['D', 
    'E', 
    'F', 
    'G']), 
('B', 
    ['H']), 
('C', 
    ['I']) 
] 

result = [] 

for x in data: 
    for y in x[1]: 
     result.append((x[0], y)) 
+0

Das Listenverständnis von crescentfresh ist kürzer, aber das ist nicht gerade lang, und für einige Leute wird es einfacher zu folgen, besonders für Anfänger. –

10

Versuchen:

>>> a = [('A', ['D', 'E', 'F', 'G']), ('B', ['H']), ('C', ['I'])] 
>>> [(k,j) for k, more in a for j in more] 
[('A', 'D'), ('A', 'E'), ('A', 'F'), ('A', 'G'), ('B', 'H'), ('C', 'I')] 

Diese Griffe nur eine Ebene der Verschachtelung natürlich.

+0

Funktioniert für mich perfekt. Ich blieb mit dem beschäftigt, was zu lange einfach sein sollte. Jetzt verstehe ich auch, was Generatoren sind, danke! –

+0

@kon: Ich habe keinen Generator verwendet. Das ist ein Listenverständnis, das Sie dort sehen: http://www.network-theory.co.uk/docs/pytut/ListComprehensions.html –

1

(Side comment) Warum in aller Welt haben Sie so eingedrückt? Ist das Folgende nicht lesbarer?

a = [ 
('A', ['D', 'E', 'F', 'G']), 
('B', ['H']), 
('C', ['I']) 
] 
Verwandte Themen