以下程序是在给定范围内查找素数.对于noprimes列表理解部分,为什么我们在范围内有3个参数?
noprimes = [j for i in range(2, 8) for j in range(i*2, 50, i)]
primes = [x for x in range(2, 50) if x not in noprimes]
print prime
Run Code Online (Sandbox Code Playgroud)
我在那做什么?
Thi*_*ter 17
查看文档:
range([start], stop[, step])
Run Code Online (Sandbox Code Playgroud)
将它与for(..; ..; ..)循环比较时,例如在C中,使用三个参数,如下所示:
for(int i = start; i != stop; i += step)
Run Code Online (Sandbox Code Playgroud)
文档中也有很好的例子:
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5)
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3)
[0, 3, 6, 9]
>>> range(0, -10, -1)
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(0)
[]
>>> range(1, 0)
[]
Run Code Online (Sandbox Code Playgroud)
因为range(),基本的想法是它为你生成一系列项目.请参阅此参考http://docs.python.org/library/functions.html#range:
format: range([start], stop[, step])
Run Code Online (Sandbox Code Playgroud)
与此同时,这里有一些基本的解释,最简单的例子:
range(5)
Run Code Online (Sandbox Code Playgroud)
将生成从0开始的范围内的数字(默认开始值),并以1为增量(默认值)上升到但不包括5,所以
In [1]: range(5)
Out[1]: [0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
您可以指定范围的其他参数,例如起始值,结束值以及stepvalue.所以range(startval, endval, stepval).注意,endval被不包括所生成的序列中
range(0, 5, 1)
Run Code Online (Sandbox Code Playgroud)
相当于
range(5)
Run Code Online (Sandbox Code Playgroud)
要生成0到20之间的所有偶数,您可以这样做
range(0, 21, 2)
Run Code Online (Sandbox Code Playgroud)
请注意,在Python 3之前range生成一个列表并xrange按需生成数字序列.
在您的特定代码中使用列表推导和范围.通过暂时消除列表理解以获得更清晰的想法,可能更容易理解算法和for循环的作用.List comprehension是一个功能强大且高效的构造,如果您计划保留原始代码,则绝对应该使用它.
#noprimes = [j for i in range(2, 8) for j in range(i*2, 50, i)]
noprimes = []
for i in range (2, 8):
for j in range (i*2, 50, i):
noprimes.append(j)
# primes = [x for x in range(2, 50) if x not in noprimes]
primes = []
for x in range(2, 50):
if x not in noprimes:
primes.append(x)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35697 次 |
| 最近记录: |