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所說,你需要在現有的列表上繼續構建,而不是嵌套新的列表。 –