2015-12-15 2 views
2

У меня естьЕсли оператор в списке понимание с лямбда

listName = [[0,1,2,15,16,17,2,3,4,6,8,9]] 

Моя строка кода

[list(g) for k, g in groupby(listName, key=lambda i,j=count(): i-next(j))] 

раскалывается listName в [[0,1,2],[15,16,17],[2,3,4],[6,8,9]] Я хочу, чтобы раскол произойдет, только если следующее число меньше предыдущее число. то есть Я хочу, чтобы мой listName разделить на

[[0,1,2,15,16,17],[2,3,4,6,8,9]] 

Спасибо! :)

+0

Пожалуйста, не задать тот же вопрос несколько раз. (Однажды в качестве дополнения к вашему исходному вопросу, а затем снова вчера, а теперь здесь.) – DSM

ответ

2

Это гораздо проще использовать функцию генератора, используя itertools.chain для создания итератора и придавить список:

listName = [[0, 1, 2, 15, 16, 17, 2, 3, 4, 6, 8, 9]] 

from itertools import chain 
def split(l): 
    it = chain(*l) 
    prev = next(it) 
    tmp = [prev] 
    for ele in it: 
     if ele < prev: 
      yield tmp 
      tmp = [ele] 
     else: 
      tmp.append(ele) 
     prev = ele 
    yield tmp 


print(list(split(listName))) 
+0

Благодарим вас за быстрый ответ. Это сработало чудесно. Очень рад сейчас! :) –

+0

@MikeIssa, не беспокойтесь, вы могли бы что-то взломать с помощью itertools, но это, скорее всего, было бы нечитаемым –

Смежные вопросы