python - 转换值列表
问题描述
我有一个字符串列表(我的实际列表要长得多):
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"]]
有什么办法可以轻松搞定吗?
解决方案
简短的方法(假设输入列表以现有的动物名称开头):
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)
推荐阅读
- ios - 反应原生“'AIRMapCoordinate.h'文件未找到”错误
- javascript - 多个动画在css中一次旋转调用一个元素的切换onclick(慢速旋转,中等旋转,快速旋转)?
- c++ - 如何在paintEvent() 之外绘制?Qt, C++
- bash - If/Else 语句检查是否提供了参数
- mysql - MySQL Node JS DELETE 无效 - 0 行受影响
- hive - 在插入覆盖中禁用 Hive 压缩的选项
- azure-devops-rest-api - Azure DevOps 客户端库 - 下载早期的存储库文件
- c++ - 我应该在哪里包含库中 bin 文件夹中的 .dll 文件?
- asp.net-core - Nuget 打包不包括正确方式的依赖项
- c++ - 我可以在 ASP MVC 应用程序中添加 C++ DLL