无论我尝试什么,我似乎无法通过我的大脑实现这一点,但必须有一种方法来映射生成器功能.
例如,如果我想将列表[1,2,3,4,5,6,7,8,9,10]中的每个成员与列表[1,2,3]中的相应成员相乘,那么之后[1,2,3]列表用完它会重启:
[1 2 3 4 5 6 7 8 9 10]
x [1 2 3 1 2 3 1 2 3 1 ]
------------------------------------
[1 4 9 4 10 18 7 16 27 10]
Run Code Online (Sandbox Code Playgroud)
如果您不知道[1,2,3,4,5,6,7,8,9,10]列表的长度,您会怎么做?
我无法弄清楚为什么输出结果如下:
> File "<pyshell#177>", line 6, in func
> list.append(next(PrimeGen))
> StopIteration
Run Code Online (Sandbox Code Playgroud)
当它在我的脑海中变得如此有意义!! 无论如何基本上我正在尝试使用ifprime函数和生成器来生成一个Prime Generator来收集列表中的素数.
这确定是否为prime并返回值,否则为空.
Run Code Online (Sandbox Code Playgroud)def prime(x): if (2**(x-1))%x ==1: return x
这使得生成器应该返回一个列满了素数的列表,最多为x但是却给出了上面的错误.我开始列表里面有一个2,因为上面的函数prime(x)不认为2作为素数(所以范围从3开始)
Run Code Online (Sandbox Code Playgroud)def func(x): count=0 list=[2] PrimeGen = (prime(X) for X in range(3,x+1)) while count<99: list.append(next(PrimeGen)) count+=1 print list
任何人都可以解释为什么它不起作用?先感谢您!V.
我正在学习C,我的一个函数(这里没有显示)依赖于两个数组是相同的.我有一个数组,我正在尝试生成一个副本,但会发生的是,两个数组在复制后都变成了0.我不知道这是怎么发生的.任何人都可以帮助解释为什么会发生这种情况并提供一个如何做到正确的解决方案?
#include <stdio.h>
int main(){
int array[5]={3,2,7,4,8};
int other_array[5]={0,0,0,0,0};
for (int i=0; i<5; i++) array[i]=other_array[i]; //Copies array into other_array
printf("array is:\n");
for (int j=0; j<5; j++) printf("%d", array[j]);
printf("\nother_array is:\n");
for (int i=0; i<5; i++) printf("%d", other_array[i]);
printf("\n");
return 0;
}
/*
When run this yields
**********************
array is:
00000
other_array is:
00000
*/
Run Code Online (Sandbox Code Playgroud)