我需要对两个长度不相等的嵌套列表进行元素明智的相乘。如果长度相同,我知道如何进行元素乘法,但是我花了太多时间解决这个问题。
我正在使用Python 3.x
multiplier_list的每个内部列表都应与数据的每个内部列表一起单独使用-明智的选择。
data = [[[2,3,4],[5,6,10],[11,12,13]],[[2,3,4],[5,6,10],[11,12,13]]]
multiplier_list = [[2,3,4],[5,6,10]]
expected_result = [[[4,9,16],[10,18,40],[22,36,52]],[[10,18,40],[25,36,100],[55,72,130]]]
答案 0 :(得分:1)
使用您提供的数据,嵌套列表 的长度相等,但是相乘的因子处于不相等的嵌套级别。这可以通过在实际计算乘法之前先降到一个列表而不是另一个列表来解决。
例如,multiplier_list
和data
都有两个元素。 data
的每个元素本身就是一个列表,需要由multiplier_list
的相应元素对其进行操作。在这两种情况下,最低级别的列表都有三个元素,它们正确对应。
这是一种单行(技术上)的列表理解,可从给定的输入产生期望的输出:
expected_result = [
[
[
(datum * factor)
for datum, factor in zip(data_subsublist, mult_sublist)
] for data_subsublist in data_sublist
] for data_sublist, mult_sublist in zip(data, multiplier_list)
]
# [[[4, 9, 16], [10, 18, 40], [22, 36, 52]], [[10, 18, 40], [25, 36, 100], [55, 72, 130]]]