繁体   English   中英

从特定 str 列出列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM