Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在列表的列表中搜索元素的索引_Python_Python 3.x_List - Fatal编程技术网

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

Python 在列表的列表中搜索元素的索引,python,python-3.x,list,Python,Python 3.x,List,我有一个列表,需要得到其中元素的索引 假设我有一个列表[[0,0,0,'p'],[0,0,0,0],[0,'Q',0,0],[0,0,0]] 如果只有一个“p”和一个“Q”,我怎么才能得到“p”和“Q”的索引 我试过:list.index'p' 但是Get ValueError:“p”不在列表中您可以在每次迭代中使用列表理解和枚举: l = [[0,0,0,'P'],[0,0,0,0],[0,'Q',0,0],[0,0,0,0]] indexes = [[i for i, a in enume

我有一个列表,需要得到其中元素的索引

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

如果只有一个“p”和一个“Q”,我怎么才能得到“p”和“Q”的索引

我试过:list.index'p'


但是Get ValueError:“p”不在列表中

您可以在每次迭代中使用列表理解和枚举:

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]}
[[2, 1], [0, 3]]
最后,要获得完整的子列表:

final_values = final_dict.values()
输出:

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

如果要查找子列表中元素所在的索引,可以尝试以下操作:

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

def find_position(input_list, element):
    index = 0
    for sublist in input_list:
        if element in sublist:
            return index
        index += 1
    return None

find_position(input_list, 'P')
OUT: 0

find_position(input_list, 'Q')
OUT: 2

在这里,搜索数组的元素本身就是数组,因此您需要做一些工作来获得所需的内容

我假设在搜索“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)
您必须在嵌套列表中搜索:

解释如下:

当在嵌套的_列表中找不到“p”时,index方法会引发ValueError,因此在使用前会进行if测试

由于您只有一个“p”,请在成功搜索后中断for循环

注:


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

如果在列表理解之前将p和Q放在一个集合中,如果a==p或a==Q可以缩短为a in p_Q_setprintindexes将[[3]、[1]、[1]、[3]作为输出,我如何将其格式化为[2,1]&[0,3]?如果p不存在,为什么不直接处理抛出的异常?首先检查它是否在那里意味着先扫描列表,然后再次扫描以找到位置。。。通过捕获异常(如果它发生),您已经证明它不在那里,而如果它在那里,您的索引只扫描了它需要的范围,您就有了索引。没有必要做更多的工作。@JonClements你肯定是对的,但我决定将我的答案调整到OP假设的水平,并使用了他关于“P”单一存在的先决条件。很公平——尽管在这个水平上——他们可能会把你需要检查存在以避免错误的建议当作福音——这不是一个错误错误-只是一个例外,不一定是坏事,如果不是的话-这。。。“真的没有帮任何人的忙吗?”JonClements谢谢你的有用评论,我对我的答案进行了编辑。