您确实可以使用二维列表m 上的枚举获得所需的输出。然后,您需要通过将地图对象转换为列表将其分配回m。你可以这样做 -
方法 - 1
m = [[1,2,3],[5,6,7],[9,10,11]]
m=list(map(lambda x: (x[0],x[1]), enumerate(m)))
print(m)
输出:
[(0, [1, 2, 3]), (1, [5, 6, 7]), (2, [9, 10, 11])]
方法 - 2
另一种可能的方法如下 -
m = [[1,2,3],[5,6,7],[9,10,11]]
m=list(map(lambda x: (m.index(x),x), m))
# finding index in m using m.index(x) instead of x.index(x[0]) which would always return 0
print(m)
输出:
[(0, [1, 2, 3]), (1, [5, 6, 7]), (2, [9, 10, 11])]
您试图对(x.index(x[0]) 执行的操作会在原始二维列表的元素中找到始终为您提供 0 的元素(因为您在列表中找到显然会给出 0 的第 0 个索引元素) .
你应该做的是找到你在地图中映射的元素的索引(而不是在 x 中,它是 m 的元素)。
APPROACH - 3(比前两个版本更好的选择)
比上述方法更好的解决方案(如answer 中所建议的那样)是使用列表枚举。所以,使用列表枚举的解决方案如下 -
m = [[1,2,3],[5,6,7],[9,10,11]]
m=[(index,element) for index,element in enumerate(m)]
print(m)
输出:
[(0, [1, 2, 3]), (1, [5, 6, 7]), (2, [9, 10, 11])]
事实证明,这种方法比使用带有 lambda 方法的地图要快一些。您可以阅读有关列表枚举的更多信息here
方法 - 4(单线)
由于enumerate() 返回一个包含索引和元素本身的枚举对象,因此可以将方法3 修改为更短更简单的版本,如下所示 -
m = [[1,2,3],[5,6,7],[9,10,11]]
print(list(enumerate(m)))
输出:
[(0, [1, 2, 3]), (1, [5, 6, 7]), (2, [9, 10, 11])]