2016-06-17 43 views
1

Wenn ich eine verschachtelte Liste wie folgt aussehen:Splitting verschachtelte Liste bei jeder [ ‚-1‘]

[['01'], ['02'], ['-1'], ['03'], ['04']] 

Gibt es eine Möglichkeit ich diese verschachtelte Liste verteilen in jedem ['-1']?

also, dass sie wie folgt aussieht:

[[['01'], ['02']], [['03'], ['04']]] 

Jede Art von Hilfe würde geschätzt :)

Antwort

1

die Sie interessieren,

lists = [['01'], ['02'], ['-1'], ['03'], ['04'], ['-1'], ['05'], ['-1']] 

results = list() 
prev_idx = 0 
for idx, l in enumerate(lists): 
    if l == ['-1']: 
     results.append(lists[prev_idx:idx]) 
     prev_idx = idx+1 

if prev_idx <= idx:  # the last group might be [] as shown in this case 
    results.append(lists[prev_idx:]) 

print(results) 
# Output 
[[['01'], ['02']], [['03'], ['04']], [['05']]] 
+0

Danke für die Antwort! – RoadRunner

0

Eine gute altmodische Schleife sollte es tun:

l = [['01'], ['02'], ['-1'], ['03'], ['04']] 

new = [] 

current = [] # Build a new list here 
for i, item in enumerate(l): 
    if item != ['-1']: 
     current.append(item) 
     if i == len(l) - 1: # If the item is the last in the list 
      new.append(current) 
    else: 
     new.append(current) 
     current = [] 

>>> [[['01'], ['02']], [['03'], ['04']]] 
+0

Irgendein Grund für die Abstimmung unten? – kezzos

+1

Ja, weiß nicht, warum gibt es einen Downvote dafür. Dw, ich habe es trotzdem hochgestimmt. Danke für die Antwort Mann :) – RoadRunner

1

Scheint wie ein usecase für groupby

>>> from itertools import groupby 
>>> l = [['01'], ['02'], ['-1'], ['03'], ['04'], ['-1'], ['05'], ['06']]  
>>> [list(g) for k,g in groupby(l, lambda x: x == ['-1']) if not k] 
[[['01'], ['02']], [['03'], ['04']], [['05'], ['06']]] 

itertools.groupby docs

+0

Vielen Dank für die Antwort :) – RoadRunner

2

Sie itertools.groupby zu einer Gruppe bei jedem Auftreten des Split-Wert (hier ['-1']) verwenden können. if not k sorgt dafür, dass wir den Split-Wert selbst weglassen.

orig = [['01'], ['02'], ['-1'], ['03'], ['04']] 
from itertools import groupby 
n = [list(g) for k, g in groupby(orig, lambda x: x == ['-1']) if not k] 
+0

Vielen Dank für die Antwort :) – RoadRunner