Предложу задачку, есть вот такая функция:
def groups(stream, is_group):
group, items = None, []
for item in stream:
if is_group(item):
if group:
yield group, items
group, items = item, []
else:
items.append(item)
if group:
yield group, items
test_data = ('A', 1, 2, 3, 'B', 4, 5, 'C', 7)
for name, items in groups(test_data, lambda x: isinstance(x, str)):
print name, items
==============
A [1, 2, 3]
B [4, 5]
C [7]
Функция работает, но как фальшивые елочные игрушки - не радует. Особенно проверка на group != None два раза. Эстеты, помогите!