[英]Make list of list from specific str
我有一个很大的清单,看起来像:
a=["cos","3","4","5","cos1","4","5","cos2","1"]
我想创建一个类似的列表列表:
a=[["cos","3","4","5"],["cos1","4","5"],["cos2","1"]]
我试过了
sub=[]
for i,y in enumerate(a):
if "cos" in y:
sub.append([y])
continue
它没有用。 你可以帮帮我吗?
你已经接近得到你想要的了。 就目前而言,如果"cos"
是您当前正在查看的字符串的一部分,您只会创建一个新的子列表。 当"cos"
不在那个字符串中时怎么办?
现在,您只需忽略此案。 但是,您希望将此元素添加到您之前附加到sub
的子列表中。 您可以以sub[-1]
的形式访问子列表,因为它是sub
的最后一个元素,然后是 append 。
sub=[]
for y in a:
if "cos" in y:
sub.append([y])
else:
sub[-1].append(y)
这使
sub = [['cos', '3', '4', '5'], ['cos1', '4', '5'], ['cos2', '1']]
我删除了不必要的enumerate()
并continue
。
这假定a
的第一个元素包含"cos"
,因此sub[-1]
在执行该行时将始终存在。 在不是这种情况下处理错误留给读者作为练习。
注意'cos'
的出现。 如果遇到数字,只需将它们添加到临时列表中即可。 当您遇到名称'cos'
时,您应该将临时列表(您的子列表)添加到结果列表中另外创建一个以项目开头的新临时列表 has 'cos'
。
但是在第一次迭代中有一个例外,你不想在结果中添加空列表(因为你遇到'cos'
但临时是空的)。 所以if temp:
是为了那个。
a = ["cos", "3", "4", "5", "cos1", "4", "5", "cos2", "1"]
res = []
temp = []
for item in a:
if not item.startswith('cos'):
temp.append(item)
else:
if temp:
res.append(temp)
temp = [item]
if temp:
res.append(temp)
print(res)
output:
[['cos', '3', '4', '5'], ['cos1', '4', '5'], ['cos2', '1']]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.