Python 将列表中的所有整数相乘,直到达到一个整数

Python 将列表中的所有整数相乘,直到达到一个整数,python,numpy,Python,Numpy,我试图将列表中的所有元素相乘,直到得到一个整数 x=1234为1x2xx4=24,然后2x4=8 我尝试了numpy.prod,但由于某些原因,它只运行了一次 这是我的密码: import numpy as np def persistence(p): numbers = list(map(int, list(p))) multiply = [np.prod(np.array(numbers))] return multiply number = input("En

我试图将列表中的所有元素相乘,直到得到一个整数

x=1234为1x2xx4=24,然后2x4=8

我尝试了numpy.prod,但由于某些原因,它只运行了一次

这是我的密码:

import numpy as np
def persistence(p):

    numbers = list(map(int, list(p)))
    multiply = [np.prod(np.array(numbers))]

    return multiply

number = input("Enter persistence number: ")
x = persistence(number)
z = persistence(x)
print(x)
print(z)

这是一个很好的问题来介绍递归世界中的人。下面是递归解决方案的外观:

def rec_prod(n):
  s = str(n)
  while len(s) != 1:
    n = 1
    for i in s:
      n *= int(i)
    return rec_prod(n)
  return n


res = rec_prod(1234)
print(res)  # -> 8

我有一个稍微不同的实现:

def f(x):
    r = 1
    for n in x:
        r *= int(n)
    if r > 9: #double digit
        return f(str(r))
    return r

f('1234') #8

这可以通过基本python实现

导入numpy实际上会增加运行时间

尝试使用此功能:

def persistance(n):
    while(len(n)>1):
        x=1
        for i in range(len(n)):
            x*=int(n[i])
        n=str(x)
    return n
n=input()
fin=persistance(n)
print(fin)

希望有帮助:“)

这里有一个使用stdlib
math.prod的非递归解决方案:

来自数学导入产品的

def产品(n):
尽管如此:
n=str(n)
如果len(n)==1:
返回整数(n)
n=prod(映射(int,n))
我们得到:

产品(1234)#8

以下是使用该功能的方法:

from math import prod

def persistence(p):
    while len(str(p)) > 1:
        p = prod([int(i) for i in str(p)])
    return p

number = input("Enter persistence number: ")
x = persistence(number)

print(x)
输入:

Enter persistence number: 1234
输出:

8