Python:在数组中打印元素的产品

时间:2013-11-12 17:52:15

标签: python arrays

我正在尝试用len(数组)打印数组的所有元素的乘积 - 例如, array = ['1','10','11'];所以10 * 11因为10和11的长度= 2。

我写了以下代码,但似乎无法找到问题(我一直收到'无')。

import numpy
def fun(array):
    length = len(array) - 1; " find length of the array "
    for i in range(0,length+1):
        if len(array[i]) == length: 
            """find elements in array with len == length"""
            new_array = []
            new_array.append(array[i])
            "add these elements into a new array"
            for j in range(0,len(new_array)):
                return numpy.prod(int(new_array[j]))
                "find the product of these elements and return them"
            else: break
        else: break 

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

您的代码存在许多问题:

  1. 您每次在循环中重新定义new_array = [],因此之前的附加项将丢失。

  2. 你应该追加整数而不是简单的字符串。

  3. numpy.prod可以应用于整个数组,不需要第二个循环。

  4. 内圈没有正确缩进。

  5. 虽然这没有错,但是在python中你可以迭代数组/列表本身的项而不是使用索引。

  6. 工作版本:

    import numpy
    def fun(array):
        length = len(array) - 1; " find length of the array "
        new_array = []
        #iterate over the list itself.
        for item in array:
            if len(item) == length: 
                new_array.append(int(item))
        return numpy.prod(new_array)
    
    print fun(['1','10','11'])    
    

    纯python版本:

    >>> from operator import mul
    >>> arr =  ['1','10','11']
    >>> reduce(mul, (int(x) for x in arr if len(x) == len(arr)-1))
    110
    

答案 1 :(得分:2)

你的第一个问题是,在python中,没有显式返回的函数,返回None。你的代码中有一个返回值,但是你得到的是None,因为代码路径没有到达return语句(有关详细信息,请参阅下一期的问题)。例如,如果bad_abs,则以下a > 0函数将返回None。您可以通过确保每个代码路径都有一个return语句来解决此问题:

def bad_abs(a):
    if a < 0:
        return -a

def good_abs(a):
    if a < 0:
        a = -a
    return a

其次,在if语句的else子句和内部for循环的else子句中有break语句。下面是一个如何正确使用break语句的示例。

def any(array):
    return_value = False
    for item in array:
        if item == True:
            return_value = True
            break # Exit the loop and go to return
    return return_value

在您的代码中,您不希望中断,实际上在数组中的第一个非长度项之后断开会导致代码到达函数的末尾并返回None。看起来你不需要其他任何条款,所以就把它们拿出来。

最后,您在循环的每次迭代中创建一个空列表,即[],这将删除您在先前迭代中找到的值。所以你想确保在循环之外创建new_array(请给它一个更好的名字)。

def filter_product(array):
    filtered_array = []
    length = len(array) - 1
    for item in array:
        if len(item) == length:
            filtered_array.append(int(item))
    return numpy.prod(filtered_array)

这可以简化为1行列表理解,但我发现一个衬里对学习编程不是特别有用。

答案 2 :(得分:2)

首先你的代码似乎不是pythonic,因为循环不使用范围,'''用于docstring而#用于注释,你可以在需要时使用break continue

在代码中,如果第一个元素的长度不正确,代码永远不会返回。它会返回错误的值。

使用numpy的简单解决方案(除了使用mul的@hcwhsa之外):

import numpy
def fun(array):
    length = len(array) - 1;  # find length of the array
    return numpy.prod([int(x) for x in array if len(x) == length])

答案 3 :(得分:0)

numbers = ['1','10','11']
product = 1
for n in numbers:
    if len(n) == 2:
        product *= int(n)
print product