2014-10-30 5 views
3

У меня есть этот цикл для создания списка коэффициентов:Split список после повторяющихся элементов

for i in N: 
    p = 0 
    for k in range(i+1): 
     p += (x**k)/factorial(k) 
     c.append(p) 

Например N = [2, 3, 4] дал бы список C:

[1.0, 2.0, 2.5, 1.0, 2.0, 2.5, 2.6666666666666665, 1.0, 2.0, 2.5, 2.6666666666666665, 2.708333333333333] 

Я хочу способ сделать отдельные списки после каждый элемент 1.0. Например, вложенный список:

[[1.0, 2.0, 2.5], [1.0, 2.0, 2.5, 2.6666666666666665], [1.0, 2.0, 2.5, 2.6666666666666665, 2.708333333333333]] 

Я думал используя, если тест, как

for c_ in c: 
    if c_ == 1.0: 
     anotherList.append(c_) 

Это только добавляет 1,0 в, хотя и я не знаю, как я могу сделать это добавить все после одного вместо 1.0.

+0

'itertools' это путь. – smci

ответ

4

Попробуйте что-то вроде

another_list = [] 
for c_ in c: 
    if c_ == 1.0: 
     another_list.append([]) 
    another_list[-1].append(c_) 

Спасибо за предложение @James Дженкинсон

+1

Вы можете просто использовать 'another_list [-1] .append (_c)', чтобы всегда ссылаться на самый последний список, тем самым сохраняя драгоценные две строки кода. –

5

вы можете использовать itertools.groupby в списке понимание:

>>> [[1.0]+list(g) for k,g in itertools.groupby(l,lambda x:x==1.0) if not k] 
[[1.0, 2.0, 2.5], [1.0, 2.0, 2.5, 2.6666666666666665], [1.0, 2.0, 2.5, 2.6666666666666665, 2.708333333333333]] 
Смежные вопросы