0
我想从R到Python重写我自己的“素数”函数。在R看起来像这样:从R到Python的素数函数
prime_numbers <- function(x)
{
p <- 2
result <- NULL
while (p <= x)
{
if (x<3) lp <- c(2) else if (x<5) lp <- c(2,3) else if (x<7) l<- c(2,3,5) else lp <- c(2,3,5,7)
if (p%%2!=0 && p%%3!=0 && p%%5!=0 && p%%7!=0) result <- c(result,p)
p <- p+1
}
return(c(lp,result))
}
它工作正常。我只需要设置一个数字作为参数,并打印所有小于此数字的素数。
我用Python编写了这个函数。
def prime_numbers (x):
p = 2
result = None
while p <= x:
if x<3:
lp = 2
elif x<5:
lp = [2,3]
elif x<7:
lp = [2,3,5]
else:
lp = [2,3,5,7]
if p%2!=0 and p%3!=0 and p%5!=0 and p%7!=0:
result = [result,p]
p = p+1
return [lp,result]
结果接近正确,但我在控制台中收到类似这样的内容时,例如我使用50作为参数。
[[2,3,5,7],[[[[[[[[[[[[[11],13],17],19],23],29],31] ],41],43],47]]
没有打印和清单是以一种奇怪的方式给我。在我看来,Python中的列表并不像R中的向量那么容易和灵活。
如何在Python中获得与R中相同的效果,尽可能使用类似的语法?
一开始尝试'结果+ = [P]'?或'result.append(p)'? –
请注意,result = [result,p]结果var的行尚未定义。然后它变成一个列表,然后你在一个列表中对它进行叠加,从而给出一个列表的列表。然后你在列表中叠加列表列表......等等等等。 @BenBolker提供了一个很好的提示 – Adonis
正如@BenBolker所说,你需要在现有的列表上继续构建,而不是嵌套新的列表。 –