【问题标题】:multiply list elements in python在python中乘以列表元素
【发布时间】:2013-07-22 21:43:03
【问题描述】:

如何在 Python 中将一个列表的每个元素与另一个列表的每个元素相乘,然后对相乘结果变化的结果求和?

list_1 = [0, 1, 2, 3, 4, 5]

list_2 = [11, 23, m]

list_2 中的 m 元素可以是任意数字,而列表中元素的长度与输入一起输入。所以基本上该列表包含最少 2 个元素,根据用户要求最多可以达到 12 个。

我正在寻找的是一个函数/算法,它将允许以下结果列表。:

0*11 + 0*23 +..+ 0*m

1*11 + 0*23 +..+ 0*m

2*11 + 0*23 +..+ 0*m

..

3*11 + 2*23 + .. + 5*m

..

5*11 + 5*23 +..+ 5*m

【问题讨论】:

标签: python list


【解决方案1】:
[sum(x * y for x in list_2) for y in list_1]

【讨论】:

  • 最好不带内括号:[sum(x * y for x in list_2) for y in list_1]: sum 适用于生成器。
  • 这实际上不是 OP 所要求的。再看看他想要的输出;他奇怪地描述了他的要求。
  • 另外,如果这是所需的行为,sum_1 = sum(list_1); return [sum_1*y for y in list_2] 将是 O(len(list_1) + len(list_2)) 而不是 O(len(list_1)*len(list_2))
  • 是的,我明白你的意思,这实际上不是他要的。
【解决方案2】:

itertools.product 可以帮助您生成选择list1 的元素与list2 的元素相乘的所有方法。

sums = []
for list1_choices in itertools.product(list1, repeat=len(list2)):
    sums.append(sum(x*y for x, y in zip(list1_choices, list2))

或者,作为列表理解:

[sum(x*y for x, y in zip(list1_choices, list2))
 for list1_choices in itertools.product(list1, repeat=len(list2))]

【讨论】:

  • 这确实是已经(相当令人困惑)提出的问题的解决方案 - OP 需要一个 sumproduct 来自 list_1 的所有可能选择,其长度与 list_2 相同,并带有替换。
【解决方案3】:

您可以使用 for 循环:

for x in list_1:
    print sum(x * y for y in list_2)

【讨论】:

    猜你喜欢
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多