假设我有以下内容:
lists = [[1, 3, 5], [1, 2, 3], [3, 5, 7], [1, 4, 8], [2, 3, 4, 5]]
我想检索列表列表中每个元素的索引,例如数字1出现在:
lists[0], lists[1], lists[3]
如何做到这一点?
答案 0 :(得分:2)
您可以使用列表理解来实现此目的:
lists = [[1, 3, 5], [1, 2, 3], [3, 5, 7], [1, 4, 8], [2, 3, 4, 5]]
x = [i for i, elem in enumerate(lists) if 1 in elem]
如果您发现此不清楚,请考虑此for
循环:
x = []
for i, elem in enumerate(lists):
if 1 in elem:
x.append(i)
答案 1 :(得分:0)
这是使用collections.defaultdict
的O(n)解决方案。我们的想法是创建一个存储每个数字的每个索引的字典。为避免重复,我们使用set
。
例如,通过1
检索一组d[1]
或list(d[1])
列表的索引。
L = [[1, 3, 5], [1, 2, 3], [3, 5, 7], [1, 4, 8], [2, 3, 4, 5]]
from collections import defaultdict
d = defaultdict(set)
for idx, lst in enumerate(L):
for num in lst:
d[num].add(idx)
print(d)
defaultdict(set,
{1: {0, 1, 3},
3: {0, 1, 2, 4},
5: {0, 2, 4},
2: {1, 4},
7: {2},
4: {3, 4},
8: {3}})