每次值更改时如何拆分列表? [复制]
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)
【讨论】:
以上是关于每次值更改时如何拆分列表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章