如何在列表列表中获取相同值的所有出现的索引列表?

时间:2016-01-27 12:05:35

标签: python

列出清单

mylist = [[1, 3, 4], [3, 6, 7], [8, 0, -1, 3]]

我需要一种方法来获取包含某些特定值的所有元素的索引的列表,' 3'例如。所以对于' 3'的价值这样的索引列表应该是

[[0, 1], [1, 0], [2, 3]]

提前致谢。

更新:我们可以在同一个子列表中设置多个寻求值(' 3'在我们的例子中)的实例,例如

my_list = [[1, 3, 4], [3, 6, 7], [8, 0, -1, 3, 3]]

所以期望的输出将是[[0, 1], [1, 0], [2, 3], [2, 4]]

我认为我的解决方案有点幼稚,现在是:

my_list = [[1, 3, 4], [3, 6, 7], [8, 0, -1, 3, 3]]
value = 3
list_of_indexes = []

for i in range(len(my_list)):
        for j in range(len(my_list[i])):
            if my_list[i][j] == value:
                index = i, j
                list_of_indexes.append(index)

print list_of_indexes

>>[(0, 1), (1, 0), (2, 3), (2, 4)]]

很高兴看到更紧凑的解决方案

2 个答案:

答案 0 :(得分:1)

假设每个子列表中出现一次值,您可以使用以下函数,该函数使用内置的enumerate函数和列表推导:

my_list = [[1, 3, 4], [3, 6, 7], [8, 0, -1, 3]]

def func(my_list, x):
    return [[idx, sublist.index(x)] for idx, sublist in enumerate(my_list)]

answer = func(my_list, 3)
print(answer)

<强>输出

[[0, 1], [1, 0], [2, 3]]

答案 1 :(得分:0)

简单的方法,

def get_val(mylist, val):
    for ix, item in enumerate(mylist):
        yield [ix, item.index(val)]

mylist = [[1, 3, 4], [3, 6, 7], [8, 0, -1, 3]]

val = list(get_val(mylist, 3))
print(val)

输出:

[[0, 1], [1, 0], [2, 3]]