重复元素后拆分列表

3

我有一个循环来创建系数列表:

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]]

我在考虑使用if测试,例如

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

这只会添加1.0,我不知道如何使其附加在1后面的所有内容而不仅仅是1.0。


itertools 是一个不错的选择。 - smci
2个回答

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]]

4

尝试类似以下代码:

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

感谢@James Jenkinson的建议。

1
你可以使用 another_list[-1].append(_c) 来始终引用最近的列表,从而节省宝贵的两行代码。 - James Jenkinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接