python - 从单个列表创建不规则的列表列表
问题描述
我正在尝试从单个列表创建列表列表。如果新列表具有相同数量的元素,我可以做到这一点,但情况并非总是如此
如前所述,当列表列表具有相同数量的元素时,下面的函数起作用。
我尝试使用正则表达式来确定元素是否与模式匹配,
pattern2=re.compile(r'\d\d\d\d\d\d')
因为我的新列表列表中的第一个值将始终为 6 位,并且它将是唯一遵循该格式的值。但是,我不确定让它在下一场比赛中停止并创建另一个列表的语法
def chunks(l,n):
for i in range(0,len(l),n):
yield l[i:i+n]
如果列表列表包含相同数量的元素,则上面的代码有效
以下是我所期望的。
OldList=[111111,a,b,c,d,222222,a,b,c,333333,a,d,e,f]
DesiredList=[[111111,a,b,c,d],[222222,a,b,c],[333333,a,d,e,f]]
非常感谢。
干杯
解决方案
可能是一种更有效的方法(循环更少),但这里有一种方法可以找到断点的索引,然后将列表从索引分割None
到索引列表的末尾,以捕获剩余的项目。如果你的 6 位数字真的是字符串,那么你可以消除str()
里面的re.match()
.
import re
d = [111111,'a','b','c','d',222222,'a','b','c',333333,'a','d','e','f']
indexes = [i for i, x in enumerate(d) if re.match(r'\d{6}', str(x))]
groups = [d[s:e] for s, e in zip(indexes, indexes[1:] + [None])]
print(groups)
# [[111111, 'a', 'b', 'c', 'd'], [222222, 'a', 'b', 'c'], [333333, 'a', 'd', 'e', 'f']]
推荐阅读
- android - 带有可编辑列表视图的 android 对话框
- swift - 打印语句未打印
- python - 如何在 Python 3.6.1 中删除单引号?
- java - Java Flight Recorder 未报告所有 GC 事件
- php - 如何在laravel中根据房价订购酒店
- laravel - Laravel 5.6 或者在哪里查询多个
- pandas - 一列与使用熊猫的所有其他列组合
- angular - 如何使用新的 httpClient 以角度处理未经授权的请求(状态为 401 或 403)
- javascript - 提交 JQuery 后隐藏表单
- python - 覆盖dict时如何正确覆盖方法keys()、items()、__iter__?