成对乘法器列表参数Python

时间:2018-08-30 12:28:49

标签: python arraylist pairwise

我正在尝试编写一个成对乘法器函数,该函数需要两个参数,两个参数都是列表。 pairwise_multiply应该返回一个新列表,其中两个输入列表中的每个元素以成对方式相乘。例如

result = pairwise_multiply([1, 2], [3, 4])
print(result)

> [3, 8]

这是我目前的功能,但我不断收到语法错误:

def pairwise_multiply([l1], [l2]):
  i = 0
  while 1 <= len(l1):
    lst = int(l1[i] * l2[i])
    i = i + 1
  return lst

2 个答案:

答案 0 :(得分:3)

在您的代码中-

def pairwise_multiply([l1], [l2]):

您不需要方括号即可将列表作为参数传递。替换为-

def pairwise_multiply(l1, l2):

另一种实现方式,更多的 pythonic 是将列表理解与zip-

一起使用
[i*j for i, j in zip(l1, l2)]

zip的作用是(根据官方文档)-

  

制作一个迭代器,以聚合每个可迭代对象中的元素。

     

返回一个元组的迭代器,其中第i个元组包含每个自变量序列或可迭代对象中的第i个元素。当最短的可迭代输入耗尽时,迭代器将停止。仅使用一个可迭代的参数,它将返回1元组的迭代器

答案 1 :(得分:2)

此代码段中存在一些语法和逻辑错误。

  • def pairwise_multiply([l1], [l2])正如@FHTMitchell指出的那样,命名参数时,您应该不能不使用[...]。这应该是def pairwise_multiply(l1, l2)

  • while 1 <= len(l1)是指i,而不是1,对吧?否则,您将陷入无限循环。另外,由于Python使用基于零的索引,因此<=应该变成<

  • 您每次迭代都覆盖lst。您的函数将仅返回(如果有,请参阅上一点)最后一次乘法的结果。

考虑到这些因素,您的代码可以转换为

def pairwise_multiply(l1, l2):
  lst = []
  i = 0
  while i < len(l1):
    lst.append(int(l1[i] * l2[i]))
    i = i + 1
  return lst

但是它有很多故障点(例如,如果l1l2的长度不一样怎么办?),它太长且不是pythonic。

我们可以使用zip并列出其答案中建议的@ThatBird之类的理解。