2010-02-02 53 views

回答

48

Range has three parameters.

你可以写range(0, 10, 2)

+4

正如xrange() – Will 2010-02-02 14:36:36

+7

+1为文档的实际链接...为什么这么少人打扰? – 2010-02-02 15:08:02

5

尝试:

range(0, 10, 2) 
0
>>> if 100 % 2 == 0 : print "even" 
... 
even 
6

我不知道这是不是你想听到的,但它是非常容易的进行筛选用列表理解排除奇数值。

evens = [x for x in range(100) if x%2 == 0] 

evens = [x for x in range(100) if x&1 == 0] 

你也可以使用可选的步长参数range由2

+0

你也可以编写'map(lambda x:x * 2,range(0,50))' – SLaks 2010-02-02 14:37:44

+0

补充最后一次理解得到赔率: 赔率= [x对于范围内的x(100)如果x&1!= 0] – 2016-05-10 19:25:14

0
#This is not suggestible way to code in Python, but it gives a better understanding 


numbers = range(1,10) 

even = [] 

for i in numbers: 

    if i%2 == 0: 

     even.append(i) 
print (even) 
-1
a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 

b = [i for i in a if i % 2 == 0] 

print("Original List -->", a,"\n") 
print("and the Even Numbers-->", b) 
+0

感谢您的贡献。请注意,这是一个非常古老的问题,已经包含许多很好的答案。特别是,[Sapph的答案](https://stackoverflow.com/a/2184774/2124834)已经包含了你所描述的技术。 – Marein 2017-07-25 22:03:03

0

以计数也有一些写的方式偶数的懒惰,无限迭代器。

我们将使用itertools模块和more_itertools1,使该模拟range()迭代器。

import itertools as it 

import more_itertools as mit 


# Infinite iterators 
a = it.count(0, 2) 
b = mit.tabulate(lambda x: 2 * x, 0) 
c = mit.iterate(lambda x: x + 2, 0) 

所有后者选项可以产生甚至数的无限序列,0, 2, 4, 6, ...

您可以通过遍历他们对待这些像任何发电机,或者您也可以从itertools recipes e.g通过itertools.islicetake选择序列号n

mit.take(10, a) 
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] 

这相当于list(range(0, 20, 2))。然而,与range(),迭代器被暂停,并会得到下一批连号的,如果再次运行:

mit.take(10, a) 
# [20, 22, 24, 26, 28, 30, 32, 34, 36, 38] 

详细

给出的选项都无限迭代器start与整数,即0

  • a。 itertools.count产生的下一个值增加了step=2(请参见equivalent code)。
  • b。 more_itertools.tabulate是一个itertools recipe,它将函数映射到数字行的每个值(请参见source code)。
  • c。 more_itertools.iterate产生起始值(0)。然后将函数应用到最后一项(递增2),得出结果并重复此过程(请参见source code)。

1第三方软件包,实现了许多有用的工具,包括itertools recipestaketabulate