Мое решение прямо в консоли Python:
>>> l = [(1,'a'),(2,'b'), (1, 'e'), (3, 'b'), (2,'c'), (1, 'b'), (0,'b')]
>>> b = [-1] + [x for x, y in enumerate(l) if y[1] == 'b' or x == len(l)-1]
>>> u = zip(b,b[1:])
>>> m = [l[x[0]+1:x[1]+1] for x in u]
>>> m
[[(1, 'a'), (2, 'b')], [(1, 'e'), (3, 'b')], [(2, 'c'), (1, 'b')], [(0, 'b')]]
b — это индексы кортежей с буквой "b", начиная с -1.
[-1, 1, 3, 5, 6]
u — кортежи индексов подсписка, который мы создадим:
[(-1, 1), (1, 3), (3, 5), (5, 6)]
И для случая, не заканчивающегося кортежем на «b»:
[(1, 'a'), (2, 'b'), (1, 'e'), (3, 'b'), (2, 'c'), (1, 'b'), (0, 'b'), (6, 'a'), (8, 'e')]
дает:
[[(1, 'a'), (2, 'b')], [(1, 'e'), (3, 'b')], [(2, 'c'), (1, 'b')], [(0, 'b')], [(6, 'a'), (8, 'e')]]
person
Raul Guiu
schedule
20.03.2014
for
здесь является питоническим, поскольку намерение может быть неясным, если вы исказите это в какой-то генератор понимания. Явное лучше, чем неявное. - person dornhege   schedule 20.03.2014