python - 列表作为 python 中的引用类型

标签 python primes

以下是我编写的用于计算第 n 个素数的代码段。 我初始化 arr = [2,3,5];并且 prime(arr,n) 应该修改 arr 以包含前 n 个素数。但是 arr 不反射(reflect) prime(arr,n) 执行后的变化。 我读到列表作为引用类型传递,那么以下代码中的问题是什么。 t 表示必须进行验证的测试用例数。

程序导致错误,指出数组索引超出 arr 的范围。

import sys;
def prime (arr,n):
    while(len(arr)< n):
        num=arr[len(arr)-1]+1;prime=0;
        while(prime==0):
            prime = 1
            for val in arr:
                if(num%val==0):
                    prime=0;
                    break;
            if(prime == 1):
                print "hello";
                arr = arr + [num];print arr; print "--";
            else:
                num = num+1;


t=raw_input();
t=int(t);
arr=[2,3,5];
ans =[];
for v in range (0,t):
    n = raw_input();
    n = int(n);
    if(n<=len(arr)):
        ans = ans + [arr[n-1]];
    else:
        prime(arr,n);print arr;print"arr was printed"
        ans= ans + [arr[n-1]];
print ans;print 'ans ';

下面是上面代码的示例运行

>>> 
1
4
hello
[2, 3, 5, 7]
--
[2, 3, 5]
arr was printed

Traceback (most recent call last):
  File "C:\Users\Pulkit\Desktop\Random\nth_prime.py", line 30, in <module>
    ans= ans + [arr[n-1]];
IndexError: list index out of range

提前致谢:)

最佳答案

改变行:

arr = arr + [num];

arr.append(num)

新行实际上改变了 arr 数组。原始行没有改变它;它创建了一个名为 arr变量(它是一个 rebinding operation instead of a mutating one )

此更改后的示例运行:

1
4
hello
[2, 3, 5, 7]
--
[2, 3, 5, 7]
arr was printed
[7]
ans 

关于python - 列表作为 python 中的引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11977060/

相关文章:

python - Turtlebot 订阅者 pointcloud2 在 Gazebo 模拟器中显示颜色,但在机器人中不显示

python - 从 Pandas Dataframe 中条件提取数据

python - 漂亮的汤和解析reddit

python - 在python中创建二维数组的两种方法

java - 覆盖 hashCode() 时使用更大的素数作为乘数

python - z3 python代码中的错误

python - 用于计算素数和的 Lambda 函数

prolog - 在 Prolog 中确定数字是否为质数

c++ - 通过 Crypto++ 生成随机素数

java - 从具有相同除数集的相同长度的两个数组中计算对