You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在二维列表中查找元素并返回索引?Python函数调试求助

问题排查与解决方案

咱们先看看你的代码里存在的几个问题:

  • 生成器没有index()方法
    你写的(j for i in my_list for j in i).index(str1)会直接报错,因为生成器对象并不支持index()方法——只有列表这类序列类型才有这个方法。

  • 返回的是一维索引,不是二维坐标
    就算你把生成器改成列表推导式[j for i in my_list for j in i].index(str1),得到的也只是把二维列表扁平化后的一维位置(比如你的测试用例里会返回4),但这显然不是你想要的「所在的索引」(应该是行和列的坐标,比如(1, 1))。

  • 逻辑冗余且效率不高
    你先把整个二维列表扁平化一次判断是否存在'x',然后又扁平化一次找索引,相当于遍历了两次整个列表,没必要。


修复后的代码

我们可以直接遍历每一行的索引和内容,然后在每行里查找'x'的位置,找到后立刻返回坐标,这样更高效:

def find_treasure(my_list):
    for row_idx, row in enumerate(my_list):
        if 'x' in row:
            col_idx = row.index('x')
            return (row_idx, col_idx)
    # 如果没找到'x',可以返回None或者抛出异常,这里返回None作为示例
    return None

treasure_map = [[' ', ' ', ' '], [' ', 'x', ' '], [' ', ' ', ' ']]
print(find_treasure(treasure_map))  # 输出 (1, 1)

代码解释

  • enumerate(my_list)会同时返回每行的索引(row_idx)和行内容(row
  • 对每一行先判断是否包含'x',如果有就用row.index('x')拿到列索引col_idx
  • 找到后直接返回(row_idx, col_idx),不用遍历剩余元素,效率更高
  • 如果整个二维列表里没有'x',函数返回None,你可以根据需求改成抛出异常或者其他返回值

这样修改后,就能得到你预期的二维索引结果啦。

内容的提问来源于stack exchange,提问作者Zi San

火山引擎 最新活动