检索列表列表中的元素索引

时间:2018-06-09 08:29:29

标签: python python-3.x list

假设我有以下内容:

lists = [[1, 3, 5], [1, 2, 3], [3, 5, 7], [1, 4, 8], [2, 3, 4, 5]]

我想检索列表列表中每个元素的索引,例如数字1出现在:

lists[0], lists[1], lists[3]

如何做到这一点?

2 个答案:

答案 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}})