Поэлементное умножение двух вложенных списков неравной длины - PullRequest
0 голосов
/ 26 октября 2019

Мне нужно сделать поэлементное умножение двух вложенных списков неравной длины. Я знаю, как сделать поэлементное умножение, если длина одинакова, но я потратил слишком много времени на эту проблему без разрешения.

Я использую Python 3.x

Каждый внутренний список списка множителей должен использоваться отдельно с каждым внутренним списком данных - по элементам.

    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]]]

1 Ответ

1 голос
/ 26 октября 2019

С данными, которые вы предоставили, вложенные списки равны одинаковой длины, но факторы для умножения находятся на неравных уровнях вложенности. Это можно решить, просто опустившись дальше в один список, прежде чем вычислять умножение, а не в другой.

Например, 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]]]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...