首页 > 解决方案 > 转换值列表

问题描述

我有一个字符串列表(我的实际列表要长得多):

Animals = ["Dog", "1", "F", "2",
           "Cat", "M",
           "Horse", "40", "D", "9", 
           "Human", "50", "E",
           "Zebra", "50", "4", "P", "A", "19",
           "Dog", "60", "1"]

如果有任何用处,我也有动物名称列表:

Animal_names = ["Dog", "Cat", "Horse", "Human", "Zebra"]

我想要做的是对其进行转换,使其变为以下内容(以动物名称开头的列表列表以及名称之后的后续值,并在下一个名称出现在Animals_names之前结束):

[["Dog", "1", "F", "2"],
 ["Cat", "M"],
 ["Horse", "40", "D", "9"], 
 ["Human", "50", "E"],
 ["Zebra", "50", "4", "P", "A", "19"],
 ["Dog", "60", "1"]]

有什么办法可以轻松搞定吗?

标签: pythonpython-3.x

解决方案


简短的方法(假设输入列表以现有的动物名称开头):

res = []
for a in animals:
    if a in animal_names:
        res.append([a])
    else:
        res[-1].append(a)
print(res)

输出:

[['Dog', '1', 'F', '2'], ['Cat', 'M'], ['Horse', '40', 'D', '9'], ['Human', '50', 'E'], ['Zebra', '50', '4', 'P', 'A', '19'], ['Dog', '60', '1']]

或者没有else分支的另一种方式 - 但这会导致更多的append调用(因此应该被认为是一个较慢的调用):

res = []
for a in animals:
    if a in animal_names:
        res.append([])
    res[-1].append(a)

推荐阅读