python - 在列表列表中查找出现在两个列表中的元素
问题描述
我有一个列表列表:
[[10, 9, 8], [8, 7], [1, 2, 3]]
子列表的大小不一定相同。我需要找到一个出现在两个单独列表中的数字,并返回这些列表中的列表索引和数字索引。
在这种情况下,它将是 8,列表 0,列表 1,列表 0 idx 2,列表 1 idx 0。
现在我正在用一堆 for 循环来做这件事,但这太慢了……有没有更快、更 Python 的方式来实现这一点?
解决方案
您可以enumerate
列出列表中的列表和项目,并将每个元素的索引元组存储在 a 中dict
,然后过滤那些出现两次以上的条目。
lst = [[10, 9, 8], [8, 7], [1, 2, 3]]
in_list = collections.defaultdict(list)
for i, x in enumerate(lst):
for k, y in enumerate(x):
in_list[y].append((i, k))
res = {k: v for k, v in in_list.items() if len(v) > 1}
# {8: [(0, 2), (1, 0)]}
(这假设没有元素在同一个子列表中出现多次。)
虽然这也使用了“一堆 for 循环”(取决于你对“一堆”的定义),它只会访问嵌套列表中的每个元素一次,给它 O(n) (n = comb. size of lists )。
推荐阅读
- c# - 如何为json设置类?
- javascript - 将数据保存到数据库并发送电子邮件的 php 代码适用于 chrome 但不适用于 safari
- android - 必须在 Android Studio 中更改颜色的按钮问题
- python - 向 python 请求提供 Postman 的环境配置数据
- gerrit - zuul 事件触发时克隆 gerrit 存储库?如何停止?
- java - 需要确定程序中的正数、负数和零数,并将所有正数和负数分别相加
- tensorflow-lite - tensorflow-lite - 使用 tflite 解释器在输出中获取图像
- angular - Angular 材质:没有提供 dialogRef
- wikipedia-api - 从 Wikipedia API 只获取没有 JSON 的 wikitext
- python - PyQt5 在 Ubuntu 18.04 下无法删除标志 WindowStaysOnTopHint