2016-09-23 6 views
1
list = [('a5', 1), 1, ('a1', 1), 0, 0] 

Ich möchte die Elemente der Liste in 3 gruppieren, wenn das zweite oder dritte Element in der Liste fehlt "None" an der entsprechenden Stelle angehängt werden muss.Gruppierung Liste Elemente in Python

exepected_output = [[('a5', 1), 1,None],[('a1', 1), 0, 0]] 

Gibt es einen pythonischen Weg dafür? Neu dazu wären Anregungen hilfreich.

+5

woher wissen Sie, ob das 2. oder 3. Element fehlt? – depperm

+0

So teilen Sie eine [Liste in Stücke] (http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks) –

+0

Als eine nützliche beiseite - Woher bekommst du diese Daten * von *? Es ist sehr wahrscheinlich, dass es einen besseren Weg gibt, Ihre Daten aus dem ursprünglichen Zustand in den gewünschten Zustand zu versetzen. –

Antwort

1

Soweit ich weiß, besteht die einzige Möglichkeit, das gewünschte Ergebnis zu erhalten, darin, dass Sie Ihre Liste durchlaufen und erkennen, wenn Sie auf Tupel stoßen.

Beispiel, die funktionieren sollte:

temp = None 
result = [] 
for item in this_list: 
    if type(item) == tuple: 
     if temp is not None: 
      while len(temp) < 3: 
       temp.append(None) 
      result.append(temp) 
     temp = [] 
    temp.append(item) 

Edit: Als jemand richtig kommentiert, keine Variablenliste nennen, dann würden Sie die eingebaute Listenfunktion werden überschrieben wird. Geänderter Name im Beispiel.

+1

letzte Temperatur wird nie zum Ergebnis hinzugefügt. In dem seltenen Fall, dass das OP Ihnen tatsächlich einen guten Testfall gibt, verwenden Sie es! Am besten bevor Sie die Antwort posten. :) expected_output = [[('a5', 1), 1, Keine], [('a1', 1), 0, 0]] assert (result == expected_output) –

2

Hier ist eine etwas andere Herangehensweise als bei den anderen Antworten. Man vergleicht den Typ jedes Elements und zerlegt dann die ursprüngliche Liste in Stücke.

li = [('a5', 1), 1, ('a1', 1), 0, 0] 

for i in range(0, len(li), 3): 
    if type(li[i]) is not tuple: 
     li.insert(i, None) 
    if type(li[i+1]) is not int: 
     li.insert(i+1, None) 
    if type(li[i+2]) is not int: 
     li.insert(i+2, None) 

print [li[i:i + 3] for i in range(0, len(li), 3)]