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

时间:2017-08-19 14:08:23

标签: python python-3.x list

我有一个列表列表,我需要获取该元素的索引。

假设我有一个列表[[0,0,0,'P'],[0,0,0,0],[0,'Q',0,0],[0,0,0,0]]

如果只有一个'P'和一个'Q',我怎样才能获得'P''Q'的索引?

我试过了:list.index('P')

但获得了ValueError: 'P' is not in list

4 个答案:

答案 0 :(得分:1)

您可以在每次迭代时使用列表理解和enumerate

l = [[0,0,0,'P'],[0,0,0,0],[0,'Q',0,0],[0,0,0,0]]

indexes = [[i for i, a in enumerate(b) if a == "P" or a == "Q"] for b in l]

您还可以使用存储字母的字典以及子列表中的子列表索引和字母索引的相应列表:

new_dict = [{a:[i, b] for b, a in enumerate(c) if a == "P" or a == "Q"} for i, c in enumerate(l)]

new_dict = [i for i in new_dict if i]

final_dict = {**new_dict[0], **new_dict[1]}
print(final_dict)

输出:

{'Q': [2, 1], 'P': [0, 3]}

最后,要获得完整的子列表:

final_values = final_dict.values()

输出:

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

答案 1 :(得分:0)

如果您正在寻找元素在子列表中的索引,您可以尝试:

var test1Text = Master.test1;

答案 2 :(得分:0)

这里搜索数组的元素本身就是数组,所以你需要做一些工作才能得到你想要的东西。

我认为当搜索'P'和'Q'时,你期望得到一个元组,其中第一个值引用搜索元素出现的数组,第二个值引用的是索引。它出现的数组中的搜索元素。

您可以编写以下功能

def find_position(array, elem):
    for i, arr in enumerate(array):
        if elem in arr:
            return (i, arr.index(elem))
    return (-1, -1) # elem do not exist


find_position(l, 'Q')
Out: (2, 1)

find_position(l, 'P')
Out (0, 3)

答案 3 :(得分:0)

您必须在嵌套列表中搜索:

for nested_list in list:
    if 'P' in nested_list:
        index_of_P = nested_list.index('P')
        break

解释:

index()方法在ValueError中找不到'P'时会引发nested_list,因此if测试就在使用之前。

由于您在成功搜索后只有一个'P'break for循环。

注意:

这是一个简单但不推荐的用法。在了解例外处理后,您将看到更合适的解决方案。