Python 在列表的列表中搜索元素的索引
我有一个列表,需要得到其中元素的索引 假设我有一个列表[[0,0,0,'p'],[0,0,0,0],[0,'Q',0,0],[0,0,0]] 如果只有一个“p”和一个“Q”,我怎么才能得到“p”和“Q”的索引 我试过:list.index'p'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
但是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谢谢你的有用评论,我对我的答案进行了编辑。