2010-02-02 48 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