列表参数和数字参数的乘法

时间:2015-10-05 09:14:06

标签: python list

我有一个带有两个参数的函数,它们相乘得到例如:

的output.say
def func(x, y):

    return  x * y

如果参数是数字以及参数是数组,则此函数应该能够相乘。 说,它应该适用于

func(5, 6)

func([4, 5 ,7], [1, 2, 3])

如果两个参数的类型不同,它应该返回错误(例如:x和y都应该是列表,或者x和y都应该是整数)。我是python的新手,我不知道知道我应该做什么

4 个答案:

答案 0 :(得分:1)

您可以使用numpy.array来计算乘数:

import numpy as np

def func(x, y):
    return  np.array(x) * np.array(y)

演示:

>>> func(5,6)
30
>>> func([5,3],[6,7])
array([30, 21])

如果您不想使用np.array,可以使用列表理解和zip功能:

def func(x, y):

   try:
       return  x * y
   except TypeError:
       return [i*j for i,j in zip(x,y)]

但请注意,在这种情况下,您的数组应该具有相同的长度。如果它们可能具有可变长度,您可以使用itertools.izip_longest(在python 3.X zip_longest中)接受fillvalue填补错过的值的参数。

答案 1 :(得分:1)

要检查两个对象是否属于同一类型,您可以使用:

def func(x,y):
    if type(x) == type(y):
        #do something
    else:
        return "Error"

答案 2 :(得分:1)

检查类型和多重,如果正确:

import numpy as np

def func(x, y):
 if type(x) == type(y):
  return  np.array(x) * np.array(y)
 else:
  print "not same type: %s, %s" %(type(x), type(y))

答案 3 :(得分:1)

另一种不使用numpy的方法,使用递归 -

def func(x, y):
    if isinstance(x, (list, tuple)) and isinstance(y, (list, tuple)) and len(x) == len(y):
        return list(map(func, x ,y))   #You can simply do `map(..)` for Python 2.x
    elif isinstance(x, (float,int)) and isinstance(y, (float, int)):
        return  x * y
    else:
        raise TypeError("Cannot Multiply")

这也可以处理嵌套列表,当长度不相等或列表嵌套不正确时抛出错误。您可以根据需要更改条件。

演示 -

>>> func(10,20)
200
>>> func([10,11],[20,21])
[200, 231]
>>> func([10,[11,13]],[20,[21, 22]])
[200, [231, 286]]
>>> func([10,11,13],[20,21])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 7, in func
TypeError: Cannot Multiply