python - 每次值更改时如何拆分列表?
问题描述
我有一个值列表,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 因为它需要我对列表进行排序,并且我同时使用此列表对另一个行列表进行排序,并且我无法重新排序另一个列表,因为它是如何排序为正在运行的行在我的整个表面上订购。
解决方案
您可以尝试以下方法:
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)
推荐阅读
- mysql - MySQL:连接三个表,比较两个值
- ios - 某些文档的 Firebase Cloud Firestore 安全规则
- r - 如何使用 R 访问 Youtube Data API v3
- c++ - 尝试访问地图 C++ 地图第二部分中的数据
- ios - 可以保护 Mobile Safari 缓存免受物理访问吗?
- javascript - 返回包含该特定元素的完整数组
- google-chrome-extension - 浏览器清除数据后未清除 Microsoft Graph 登录数据
- docker - windows server 2019上rabbitmq的docker镜像
- c++ - 我的第一个柯南包没有被 CMAKE 找到?
- apache-kafka - 当 avro 模式由另一个模式作为可选字段组成时,反序列化问题