Python:如何查找子列表在列表的列表中的索引?
解决Python中查找子列表在列表中的索引问题
嘿,这问题其实挺好解决的,我给你几个适合初学者的方案,先从最基础的开始讲~
首先得先修正你示例代码里的一个小问题:Python的列表元素之间必须用逗号分隔,你原来的代码里元素直接挨在一起会报错,所以先把X和X_test改成正确的格式:
X = [[5, 1, 1, 1, 2, '1', 3, 1, 1], [5, 4, 4, 5, 7, '10', 3, 2, 1], [3, 1, 1, 1, 2, '2', 3, 1, 1], [6, 8, 8, 1, 3, '4', 3, 7, 1], [4, 1, 1, 3, 2, '1', 3, 1, 1]] X_test = [[3, 1, 1, 1, 2, '2', 3, 1, 1], [6, 8, 8, 1, 3, '4', 3, 7, 1]]
方法一:直观循环匹配(适合理解逻辑)
这是最容易看懂的方法,直接遍历X的每个元素和它的索引,然后和X_test里的元素逐一比对,找到匹配的就记录索引:
result = [] # 遍历X_test里的每个待查找子列表 for test_item in X_test: # 用enumerate同时获取X中元素的索引和值 for idx, item in enumerate(X): if item == test_item: result.append(idx) break # 找到匹配就退出内层循环,避免重复查找(如果X有重复子列表可去掉) print(result) # 输出:[2, 3]
这种方法逻辑清晰,适合刚学Python的你理解整个匹配过程,缺点是如果X的规模很大,效率会稍低,但对于你的示例数据完全够用。
方法二:字典映射(高效查找)
如果你的X数据量比较大,想要更快的查找速度,可以先把X里的子列表和对应的索引做成一个映射字典,之后直接通过字典查找就能得到结果:
# 因为列表是可变类型,不能作为字典的键,所以先转成不可变的元组 x_index_map = {tuple(item): idx for idx, item in enumerate(X)} # 遍历X_test,把每个子列表转成元组后查字典 result = [x_index_map[tuple(test_item)] for test_item in X_test] print(result) # 输出:[2, 3]
注意点:
如果X里存在重复的子列表,这个方法会保存最后一个出现的子列表的索引;而方法一则会保存第一个出现的索引,你可以根据自己的实际需求选择对应的方法。
内容的提问来源于stack exchange,提问作者Mahin
相关产品推荐
相关产品推荐

