TypeError:只有长度为1的数组才能转换为Python标量?

TypeError:只有长度为1的数组才能转换为Python标量?,python,typeerror,Python,Typeerror,这是我在程序中使用的例程(见下文),但我一直会遇到相同的错误。我该怎么做才能修好它 def multiplos(n): from numpy import unique list=[] list1=[] list2=[] for i in xrange(1,n+1): s=17*i if s%10==0 and s%2==0 and s%3==0 and s%8==0 and s%19==0 and s%

这是我在程序中使用的例程(见下文),但我一直会遇到相同的错误。我该怎么做才能修好它

def multiplos(n):
    from numpy import unique

    list=[]
    list1=[]
    list2=[]

    for i in xrange(1,n+1):
            s=17*i
            if s%10==0 and s%2==0 and s%3==0 and s%8==0 and s%19==0 and s%11==0 and s%13==0 and s%17==0:
                    list=list+[s]

    for i in xrange(1,n+1):
            m=13*i
            if m%10==0 and m%2==0 and m%3==0 and m%8==0 and m%19==0 and m%11==0 and m%13==0 and m%17==0:
                    list1=list1+[m]

    for i in xrange(1,n+1):
            t=7*i
            if t%10==0 and t%2==0 and t%3==0 and t%8==0 and t%19==0 and t%11==0 and t%17==0 and t%13==0:
                    list2=list2+[t]

    #Concatenando las tres listas
    lista_final=list+list1+list2
    #Lista sin repeticiones
    final=unique(lista_final)
    return final
节目:

n=20000

from multiplos_7_13_17 import multiplos
mult=multiplos(n)

for i in xrange(mult):
     if mult[i]%4==0 and mult[i]%6==0 and mult[i]%9==0 mult[i]%12==0 mult[i]%14==0 and mult[i]%15==0 and mult[i]%16==0 and mult[i]%17==0 and$
             print "¡Lo has encontrado!",mult[i]
     else:
             print "Este no es...D:"

错误
TypeError:只有长度为1的数组可以转换为Python标量
打印在
中,用于xrange(mult)中的i:

而不是尝试执行此操作:

for i in xrange(mult):
     if mult[i]%4==0 and mult[i]%6==0 and mult[i]%9==0 mult[i]%12==0 mult[i]%14==0 and mult[i]%15==0 and mult[i]%16==0 and mult[i]%17==0 and$
             print "¡Lo has encontrado!",mult[i]
     else:
             print "Este no es...D:"
只要这样做:

for num in mult:
     if all(num % val == 0 for val in [4, 6, 9, 12, 14, 15, 16, 17]):
         print "¡Lo has encontrado!",num
     else:
         print "Este no es...D:"
您的原始代码被破坏,因为您试图将numpy数组传递给xrange,但xrange只接受
int
值。您可能想对xrange中的i(len(mult))执行
,但这不是在这里进行迭代的最佳方式,因为您实际上不需要数组的索引。您真正关心的是数组中的每个值,因此使用
for num in mult
是一个更好的选择(并且需要更少的键入,这很好)

此外,我利用您重复进行相同比较的事实,缩短了您的if语句。我没有反复输入
num%some_number==0
,而是使用
all
和生成器表达式迭代
[4,6,9,12,14,15,16,17]
,如果
num%val==0
True
,则只返回
True

编辑:

下面是一个完整的工作示例,带有输出。我还简化并加速了
multiplos
函数,尽管它在功能上仍然与原来的功能相同

def multiplos(n):
    from numpy import unique

    list=[]
    list1=[]
    list2=[]

    mod_list = [2, 3, 8, 10, 11, 13, 17, 19]
    for i in xrange(1,n+1):
        s=17*i
        if all(s % val == 0 for val in mod_list):
            list=list+[s]

        m=13*i
        if all(m % val == 0 for val in mod_list):
            list1=list1+[m]

        t=7*i
        if all(t % val == 0 for val in mod_list):
            list2=list2+[t]

    #Concatenando las tres listas
    lista_final=list+list1+list2
    #Lista sin repeticiones
    final=unique(lista_final)
    return final


n = 23279256
mult = multiplos(n)

for num in mult:
     if all(num % val == 0 for val in [4, 6, 9, 12, 14, 15, 16, 17]):
         print "Lo has encontrado!",num
     else:
         print "Este no es...D:"
输出:

Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Lo has encontrado! 232792560
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:

您可能希望
用于mult中的num:
用于xrange中的i(len(mult)):
可能是前者。我更改了程序,我希望计算列表中的每个术语(mult),并查看哪一个满足条件if语句末尾的
和$
应该是什么?这意味着用于显示“打印!你有安康特拉多!“,mult[i]…mult[i]需要满足前一行print
中的所有语句,$
肯定不是有效的Python。在
if
语句(
mult[i]%9==0 mult[i]%12==0 mult[i]%14==0
不是有效的Python,您需要在每个谓词之间设置
)。请注意,我已经删除了n值,因此num不存在。在您编写的代码中(感谢您的建议),我需要更改mult中每个值的num(我已经这样做了)但当我运行程序时,什么也没发生……它关闭了itself@VanesaPiedrahita这是因为
multiplos
函数返回一个空列表。@例如,如果对
n
n=50000000
使用一个大值,代码将找到匹配项。您可以从测试的除数列表中删除4和6,since任何能被12整除的数字也会被每个数字整除。@Blckknght是的,这是一个很好的观点。沿着这些思路可能还有更多的优化,这也可能超出OP要求我尝试覆盖它们的范围(尽管欢迎其他人插话:)。