2013-01-08 23 views
1

我是python的新手,想要一個產生包含大量整數的列表的函數,例如[1,3,5,7 ....]就像你可以做的那樣範圍函數即範圍(1,21,2)。定義序列的長度而不是步長

然而,不是設置上限我想設置列表應該是多長時間,所以我會說明我想要在列表中的起始點,步驟和整數的數量。這樣的功能是否存在?

回答

6

沒有,但它很容易使一個:

def myrange(start, step, count): 
    return range(start, start + (step * count), step) 

簡短演示:

>>> myrange(10, 2, 5) 
[10, 12, 14, 16, 18] 
>>> myrange(10, -2, 5) 
[10, 8, 6, 4, 2] 

在Python 3,它會返回一個range對象,就像普通range()功能將:

>>> myrange(10, 2, 5) 
range(10, 20, 2) 
>>> list(myrange(10, 2, 5)) 
[10, 12, 14, 16, 18] 
5

Martijn Pieter的答案適用於整數。如果startstep可能是花車,你可以使用一個list comprehension

[start+i*step for i in range(count)] 
+0

+1。但是,也許一個發電機會更好:'(開始+我*爲範圍(計數)的步驟)',因爲範圍也是一個發電機(至少在3)。 – Hyperboreus

+0

@Hyperboreus:我認爲「更好」取決於情況。如果你有足夠的內存,列表理解可能會更快(假設你需要使用整個列表)。但是如果你對記憶很緊張,那麼發電機就更好了。 – unutbu