python 映射:使用 2 个 lambda 函数为每一行获取 transposed_row_num,矩阵中的值对
python map: with 2 lambda functions get transposed_row_num for each row, value pair in a matrix
(请注意,我希望找到一种不使用列表理解的方法)
假设我有以下数据(0,1,2 索引行号,[[111,20,3,4], [5,66,7,8], [9,10,11,12]]
是原始矩阵的行)
df1 = [(0, [111, 20, 3, 4]),
(1, [5, 66, 7, 8]),
(2, [9, 10, 11, 12])]
我想在 map 函数中使用 2 个 lambda 函数获得以下输出。它的格式为:每行的 (transposed_row_num, (original_row_num, value)) 对(例如,行是 [111, 20, 3, 4]
等)。
transposed_row_num 是这些行的列号。例如,第 0 行中的 20 的列号为 1,因此它应该是 (1,(0,20))
):
# Desired output:
[[(0, (0, 111)), (1, (0, 20)), (2, (0, 3)), (3, (0, 4))],
[(0, (1, 5)), (1, (1, 66)), (2, (1, 7)), (3, (1, 8))],
[(0, (2, 9)), (1, (2, 10)), (2, (2, 11)), (3, (2, 12))]]
我尝试了下面的代码,但出现错误:
map2 = map(lambda x: [x[0]] + list(map(lambda y: y[0], x[1].index(y))),
df1)
list(map2)
# ValueError: [[111, 20], [3, 4]] is not in list
你可以用嵌套的list comprehension
来做,这样更容易,代码也更好
result = [
[(idx_in, (row[0], val)) for idx_in, val in enumerate(row[1])]
for row in df1
]
然后把外面的list comprehension
改成map
操作
result = list(map(lambda row: [(idx_in, (row[0], val)) for idx_in, val in enumerate(row[1])], df1))
然后把里面的list comprehension
改成map
操作
result = list(map(lambda row:
list(map(lambda idx_val: (idx_val[0], (row[0], idx_val[1])), enumerate(row[1]))), df1))
(请注意,我希望找到一种不使用列表理解的方法)
假设我有以下数据(0,1,2 索引行号,[[111,20,3,4], [5,66,7,8], [9,10,11,12]]
是原始矩阵的行)
df1 = [(0, [111, 20, 3, 4]),
(1, [5, 66, 7, 8]),
(2, [9, 10, 11, 12])]
我想在 map 函数中使用 2 个 lambda 函数获得以下输出。它的格式为:每行的 (transposed_row_num, (original_row_num, value)) 对(例如,行是 [111, 20, 3, 4]
等)。
transposed_row_num 是这些行的列号。例如,第 0 行中的 20 的列号为 1,因此它应该是 (1,(0,20))
):
# Desired output:
[[(0, (0, 111)), (1, (0, 20)), (2, (0, 3)), (3, (0, 4))],
[(0, (1, 5)), (1, (1, 66)), (2, (1, 7)), (3, (1, 8))],
[(0, (2, 9)), (1, (2, 10)), (2, (2, 11)), (3, (2, 12))]]
我尝试了下面的代码,但出现错误:
map2 = map(lambda x: [x[0]] + list(map(lambda y: y[0], x[1].index(y))),
df1)
list(map2)
# ValueError: [[111, 20], [3, 4]] is not in list
你可以用嵌套的
list comprehension
来做,这样更容易,代码也更好result = [ [(idx_in, (row[0], val)) for idx_in, val in enumerate(row[1])] for row in df1 ]
然后把外面的
list comprehension
改成map
操作result = list(map(lambda row: [(idx_in, (row[0], val)) for idx_in, val in enumerate(row[1])], df1))
然后把里面的
list comprehension
改成map
操作result = list(map(lambda row: list(map(lambda idx_val: (idx_val[0], (row[0], idx_val[1])), enumerate(row[1]))), df1))