每次值更改时如何拆分列表? [复制]

Posted

技术标签:

【中文标题】每次值更改时如何拆分列表? [复制]【英文标题】:How can I split a list every time the value changes? [duplicate] 【发布时间】:2020-02-24 12:46:33 【问题描述】:

我有一个值列表,7,7,7,7,7,7,7,7,6,6,6,6,6,6,7,7,7,7,7,8, 8,8,8,8,8,8,8,5,5,5,5,5,5,6,6,6,6,6 等,我需要将列表拆分为列表格式列表时间值发生变化,使其变为 [[7,7,7,7,7,7,7,7],[6,6,6,6,6,6],[7,7, 7,7,7],[8,8,8,8,8,8,8,8],[5,5,5,5,5,5],[6,6,6,6,6] ].

我尝试了如下代码,但是它告诉我有一个意外的令牌“for”。还有其他更清洁的方法(一个衬垫)吗?

for i, n in enumerate(x):
    inds = []
    if x[i] != x[i-1]:
        inds.append(i)
list(split_after(x, lambda i: i for i in inds))

编辑:我不能使用 groupby,因为它需要我对列表进行排序,并且我同时使用此列表对另一个行列表进行排序,并且由于它的排序方式,我无法重新排序另一个列表是围绕我的整个表面排列的线条。

【问题讨论】:

i for i in 只会为您提供与 inds 相同的可迭代对象 具体看这里的第一个例子:***.com/a/45873519/476 @deceze groupby 要求我对列表进行排序,但我不能这样做,因为我需要它完全按照它呈现的顺序,而不是按排序列表。这是因为我正在针对另一组数据同时运行它,使用它来拆分另一组数据。 groupby 将按照列表的顺序处理列表;对于您的用例it'll work exactly as you want it to work,您没有对其进行排序。 @AltheaC groupby not 需要对列表进行排序。事实上,如果您提供的示例是准确的,那么排序会给您一个不正确的输出。 【参考方案1】:

您可以尝试以下方法:

indexes = [index for index, _ in enumerate(x) if x[index] != x[index-1]]
indexes.append(len(x))
final = [x[indexes[i]:indexes[i+1]] for i, _ in enumerate(indexes) if i != len(indexes)-1]

print(final)

【讨论】:

以上是关于每次值更改时如何拆分列表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何复制节点列表?

每次我的平面列表数据更改时,如何显示活动指示器?

如何在python中将数字列表拆分为电话号码? [复制]

如何将列表拆分为较小的列表?

jQuery Mobile:在列表视图数据拆分图标上更改/切换主题

如何创建多个从同一个数组中获取值的动态下拉列表,而无需更改 Javascript 中的其他下拉列表