2014-10-28 3 views
1

Я написал функцию, которая получает два аргумента: a list и одно значение, которое присутствует в списке, указанном ранее (sep). Назначение функции состоит в том, чтобы разбить данный список и вернуть несколько списков в список без значения, указанного во втором аргументе написанного fuction. Таким образом, с def split_list ([1,2,3,2,1], 2) ---> результат будет [[1], [3], [1]]. Функциональность разделения хороша, но результат сохраняет второе значение функции (sep) в отдельных списках. Я не мог думать о том, как решить эту проблему. Заранее спасибоРазбиение списка с помощью разделителя

def split_list(l, sep): 
occurence = [i for i, x in enumerate(l) if x == sep] 
newlist=[] 
newlist.append(l[:occurence[0]]) 
for i in range(0,len(occurence)): 
    j=i+1 

    if j < len(occurence): 
    newlist.append(l[occurence[i]:occurence[j]]) 
    i+=1 
newlist.append(l[occurence[-1]:]) 


return newlist 

ответ

2

Как об этом:

def split_list(l, sep): 
    nl = [[]] 
    for el in l: 
     if el == sep: 
      nl.append([]) 
     else: 
      # Append to last list 
      nl[-1].append(el) 
    return nl 

Или с методом, используя список вхождений:

def split_list(l, sep): 
    # occurences 
    o = [i for i, x in enumerate(l) if x == sep] 
    nl = [] 
    # first slice 
    nl.append(l[:o[0]]) 
    # middle slices 
    for i in range(1, len(o)): 
     nl.append(l[o[i-1]+1:o[i]]) 
    # last slice 
    nl.append(l[o[-1]+1:]) 
    return nl 
+0

спасибо пергамент! :) –

0

Используйте [список (х), х в перечислении (l), если x! = sep]

2

Вы можете разделить свой список с пониманием ниже списка и zip functio п:

>>> l=[1,2,3,2,1,8,9] 
>>> oc= [i for i, x in enumerate(l) if x == 2] 
>>> [l[i:j] if 2 not in l[i:j] else l[i+1:j] for i, j in zip([0]+oc, oc+[None])] 
[[1], [3], [1, 8, 9]] 

Так что для вашей функции:

def split_list(l, sep): 
occurence = [i for i, x in enumerate(l) if x == sep] 
return [l[i:j] if sep not in l[i:j] else l[i+1:j] for i, j in zip([0]+occurence, occurence+[None])] 
Смежные вопросы