为了账号安全,请及时绑定邮箱和手机立即绑定

如何在嵌套列表 Python 中定位索引

如何在嵌套列表 Python 中定位索引

沧海一幻觉 2021-08-11 22:43:18
从输入导入列表def find_peak(m: List[List[int]]) -> List[int]:    """    Given an non-empty elevation map m, returns the cell of the    highest point in m.Examples (note some spacing has been added for human readablity)>>> m = [[1,2,3],         [9,8,7],         [5,4,6]]>>> find_peak(m)[1,0]>>> m = [[6,2,3],         [1,8,7],         [5,4,9]]>>> find_peak(m)[2,2]"""max_location = []for sublist in m:    max_location.append(max(sublist))max_location = max(max_location)for sublist in m:    if max_location in sublist:        return (m.index(max_location),sublist.index(max_location))这并没有真正起作用,因为它只是返回该数字不在列表中
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

您还可以充分利用enumerate. 首先找到具有最大编号的行(及其索引)。然后在该行中找到该数字及其索引。


在这两种情况下,您都需要为max函数提供一个键,以便它考虑值(而不是索引):


def find_peak(m):

    i, max_row = max(enumerate(m), key=lambda x: max(x[1]))

    j, max_val = max(enumerate(max_row), key=lambda x: x[1])

    return [i, j]

输出


print(find_peak([[1,2,3], [9,8,7], [5,4,6]]))

# [1, 0]

print(find_peak([[6,2,3], [1,8,7], [5,4,9]]))

# [2, 2]


查看完整回答
反对 回复 2021-08-11
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

我认为当您考虑迭代索引而不是列表中的项目时它更容易:


from itertools import product


d = [[1, 2, 3], [7, 9, 8], [4, 5, 6]]


# generate all indices

x_len = range(len(d))

y_len = range(len(d[0]))

indices = product(x_len, y_len)


# select maximal item by index

key = lambda x: d[x[0]][x[1]]

max_index = max(indices, key=key)


print(max_index)


查看完整回答
反对 回复 2021-08-11
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您可以在展平的输入结构中找到最大值,然后返回指定先前找到的最大值位置的坐标:


from typing import List

def find_peak(m: List[List[int]]) -> List[int]:

  _max = max([i for b in m for i in b])

  return [[i, a] for i in range(len(m)) for a in range(len(m[0])) if m[i][a] == _max][0]


print(list(map(find_peak, [[[1, 2, 3], [9, 8, 7], [5, 4, 6]], [[6, 2, 3], [1, 8, 7], [5, 4, 9]]])))

输出:


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


查看完整回答
反对 回复 2021-08-11
  • 3 回答
  • 0 关注
  • 378 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信