Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
填充列表的Python代码有效,但填充向量的类似代码无效';我不能在R工作_Python_R_For Loop - Fatal编程技术网

填充列表的Python代码有效,但填充向量的类似代码无效';我不能在R工作

填充列表的Python代码有效,但填充向量的类似代码无效';我不能在R工作,python,r,for-loop,Python,R,For Loop,从给定的输入向量得到一个由素数组成的向量作为输出。在Python中工作,我将输入列表中的每个素数追加到一个空列表中,但在R中没有得到正确的输出 Python代码: def get_prime(input_list): output_list = [] for num in input_list: for i in range(2, num): if num%i == 0: break

从给定的输入向量得到一个由素数组成的向量作为输出。在Python中工作,我将输入列表中的每个素数追加到一个空列表中,但在R中没有得到正确的输出

Python代码:

def get_prime(input_list):
    output_list = []
    for num in input_list:
        for i in range(2, num):
                if num%i == 0:
                    break
        else:   
            output_list.append(num)
    return output_list
输出:

get_prime([3,4,5,6,7,8])
[3, 5, 7]
x <- c(3,4,5,6,7,8)
> get_prime(x)
[1] 3 5 5 5 7 7 7 7 7
R代码:

get_prime <- function(input_number_vector){
  prime = c()
  for(num in input_number_vector){
    for(div in 2:(num-1)){ if(num %% div == 0) break 
                           else prime = c(prime,num)
                                                   }
    }
  prime
}
看起来像是奇数:3、5、7在每个模数条件检查中追加一次。i、 e.3一次除数为2,5三次除数为2,3,4,7次除数为2,3,4,5,6。
有人能告诉我哪里出了问题,以及在这方面R是否与Python的工作方式不同

显然有更好的方法来编写代码,但就调试代码而言,这里有一些观察结果

Python中的
else
代码在
if
块之外,而在R代码中,您以与
if
相同的级别表示它。在中使用类似的
else
,而在R中不允许使用相同的内容。如果您尝试在R中使用相同的内容,您将得到一个错误。(我所说的同一件事是指有
else
而没有
if

另一点是,只有在
prime
已耗尽整个
2:(num-1)
时,才必须选中在
prime
中添加一个数字。结合这两个变化,我们可以将函数编写为

get_prime <- function(input_number_vector){
   prime = c()
   for(num in input_number_vector){
     for(div in 2:(num-1)){ 
       if(num %% div == 0) break 
     }
     if (div == num - 1)
        prime = c(prime,num)
     }
     prime
 } 

x <- c(3,4,5,6,7,8)
get_prime(x)
#[1] 3 5 7

get_prime
for..else
是Python特有的结构。您所说的
如果
我们没有打断
,我们将附加
R
没有这样的构造,因此
else
if
匹配。您似乎还将Python语法的空格规则解释为在这里是一样的——这也是一个独特的Python东西。我所知道的任何其他语言如果遇到if…else
将一起解释它们,而不考虑它们之间的换行符/间距,这是您意想不到的


在没有特殊Python构造的情况下,最简单的方法是在循环之前使用一个标志,
is\u primer,因为R代码与Python代码做的不一样。它们相似但不完全相同(R代码附加到内部循环中的向量)。每次余数为非零时,您都要更新
prime
向量。如果尝试使用一些奇数非素数,此代码将多次打印该数字,因为超过第一个除数的数字从2开始。R使用
TRUE
FALSE
作为逻辑值(不是
1
0
),并且不使用分号。否则很好的解释。@KonradRudolph谢谢我会编辑的。这只是习惯的力量:)。
get_prime <- function(input_number_vector){
   prime = c()
   for(num in input_number_vector){
     for(div in 2:(num-1)){ 
       if(num %% div == 0) break 
     }
     if (div == num - 1)
        prime = c(prime,num)
     }
     prime
 } 

x <- c(3,4,5,6,7,8)
get_prime(x)
#[1] 3 5 7
is_prime<-TRUE
for(div in 2:(num-1)) {
    if(num %% div == 0) {
        is_prime<-FALSE
        break 
    }
}
if (is_prime) prime = c(prime,num)