对列表列表中分组的多个列表应用不同的权重-Python

对列表列表中分组的多个列表应用不同的权重-Python,python,nested-lists,Python,Nested Lists,我有以下清单: list_of_lists=[[1,2,3], [4,5,2], [3,2,4]] 我想创建一个函数,为每个内部列表应用不同的权重 所以当我写加权列表时(列表的列表,10,2,5.5): -第一个内部列表应乘以10 -第二个内部列表应乘以2 -第三个内部列表应乘以5.5 因此,我应具备以下条件: weighted_lists=[[10,20,30], [8,10,4], [16.5,11,22]] 请注意,此函数应支持不同数量的内部列表(在某些情况下,我们可能有3个,在其他情

我有以下清单:

list_of_lists=[[1,2,3], [4,5,2], [3,2,4]]
我想创建一个函数,为每个内部列表应用不同的权重

所以当我写加权列表时(列表的列表,10,2,5.5):
-第一个内部列表应乘以10
-第二个内部列表应乘以2
-第三个内部列表应乘以5.5

因此,我应具备以下条件:

weighted_lists=[[10,20,30], [8,10,4], [16.5,11,22]]

请注意,此函数应支持不同数量的内部列表(在某些情况下,我们可能有3个,在其他情况下,我们可能有400个)。

在这里,
lol
是列表列表

def weighted_lists(lol, *weights):
    if len(lol) != len(weights):
        raise IndexError

    return [[weight*x for x in inner] for inner, weight in zip(lol, weights)]
演示:


您可能需要查看
numpy
了解以下内容:

In [14]: import numpy as np

In [15]: list_of_lists=[[1,2,3],[4,5,2],[3,2,4]]

In [16]: weights = [10, 2, 5.5]

In [17]: (np.array(list_of_lists) * np.array(weights)[:, None]).tolist()
Out[17]: [[10.0, 20.0, 30.0], [8.0, 10.0, 4.0], [16.5, 11.0, 22.0]]

如果您喜欢函数式,可以使用
itertools
operator.mul

list_of_lists = [[1, 2, 3], [4, 5, 2], [3, 2, 4]]
from itertools import izip, starmap, repeat
from operator import mul

def weighted_lists(l, *args):
    return (list(starmap(mul, izip(*(s, repeat(i))))) for s, i in izip(l, args))


print(list(weighted_lists(list_of_lists, 10, 2, 5.5)))
[[10, 20, 30], [8, 10, 4], [16.5, 11.0, 22.0]]

使用
enumerate
lambda
可以获得相同的结果

list_of_lists = [[1,2,3], [4,5,2], [3,2,4]]

def weighted_lists(a_list_of_lists, *some_weights):
    weighted_list_of_list = []
    for i, a_list in enumerate(a_list_of_lists):
        new_list = map(lambda value: value * some_weights[i], a_list)
        weighted_list_of_list.append(new_list)

    return weighted_list_of_list
和一艘班轮:

f = lambda x, *y: [map(lambda v: v * y[i], l) for i, l in enumerate(x)]
结果:

>>> f(list_of_lists, 10, 2, 5.5)
[[10, 20, 30], [8, 10, 4], [16.5, 11.0, 22.0]]
>>> weighted_lists(list_of_lists, 10, 2, 5.5)
[[10, 20, 30], [8, 10, 4], [16.5, 11.0, 22.0]]

你是要我们解决你的家庭作业问题吗?不是。只是不知道如何让我的代码以这种方式交互。我只想在np数组中添加一个tolist()
>>> f(list_of_lists, 10, 2, 5.5)
[[10, 20, 30], [8, 10, 4], [16.5, 11.0, 22.0]]
>>> weighted_lists(list_of_lists, 10, 2, 5.5)
[[10, 20, 30], [8, 10, 4], [16.5, 11.0, 22.0]]