python - 从嵌套列表中删除子列表(查找子列表的索引)
问题描述
我有一个这样的嵌套列表:
lists = [[['L', 5], ['B', 20], ['A', 10]],
[['B', 200], ['J', 90]],
[['L', 5], ['L', 6]],
[['A', 10], ['L', 12], ['A', 11], ['A', 15]]]
如何删除具有不是 A、B、L 的字符串的子列表(不仅删除不是 A、B、L 的列表,还删除整个子列表)如何找到无效项目所属的子列表的索引(在这种情况下是 1)(需要索引以完成进一步的任务)
这是我尝试过的,它可以找到无效的项目,但我不知道找到子列表的索引
for j in range (len(lists)):
for i in range (len(lists[j])):
if lists[j][i][0] != 'L' and lists[j][i][0] != 'A' and lists[j][i][0] != 'B':
return False
return True
我希望结果是这样的:
lists = [[['L', 5], ['B', 20], ['A', 10]],
[['L', 5], ['L', 6]],
[['A', 10], ['L', 12], ['A', 11], ['A', 15]]]
解决方案
您可以lists
使用反向删除习语有效地就地修改:
keep = ('A', 'B', 'L')
for i in reversed(range(len(lists))):
if any(l[0] not in keep for l in lists[i]):
del lists[i]
print(lists)
# [[['L', 5], ['B', 20], ['A', 10]],
# [['L', 5], ['L', 6]],
# [['A', 10], ['L', 12], ['A', 11], ['A', 15]]]
any
如果任何子列表的第一个元素不在 中,则返回 True keep
。
或者,您可以使用列表推导创建一个新列表:
[l for l in lists if not any(l_[0] not in keep for l_ in l)]
# [[['L', 5], ['B', 20], ['A', 10]],
# [['L', 5], ['L', 6]],
# [['A', 10], ['L', 12], ['A', 11], ['A', 15]]]
推荐阅读
- amazon-web-services - API 网关 - 端点请求随机超时
- wordpress - 发布时是否有任何方法可以在 wordpress 帖子中生成自动标题
- wordpress - 使用 Timber (Twig) 构建的 WordPress 网站是否可以使用 AMP
- c# - 运行时 C# 列表框选定索引保持在 -1
- javascript - 用于连接到不同 WebSocket 服务器的多个 WebSocket 客户端的 Node.js 集群?
- c# - 如何在 C# 中提高读取 tesseract 的准确性
- apache-kafka - 在我的 Kafka 主题中,End-of-the-Offset 高于最后一条消息的偏移量,因此我可以看到消费者滞后 1
- javascript - 为什么在 .slice() 和连接的这个用例中混合引号时不需要加 1?
- transactions - 在 LMDB 中,如何将一个 RW 事务嵌套在另一个 RW 事务中?LMDB 中嵌套事务的实际用例/应用是什么?
- android - 在添加第 3 个项目后动态添加时,RecylerView 未按顺序列出项目