2017-05-25 47 views

回答

1

您可以使用range生成您對您列表:

first_hundred_odd = list(range(1, 200, 2)) # get an iterator in 1..200 range with step of 2 

你不需要把它變成Python的2.x的列表

UPDATE

是,把range()迭代器爲list基本上執行迭代,以填補名單,但這是在語言的實現水平 - 你不range()迭代東西:

def first_odd(num): 
    return list(range(1, num * 2, 2)) 

2   0 LOAD_GLOBAL    0 (list) 
       3 LOAD_GLOBAL    1 (range) 
       6 LOAD_CONST    1 (1) 
       9 LOAD_FAST    0 (num) 
      12 LOAD_CONST    2 (2) 
      15 BINARY_MULTIPLY 
      16 LOAD_CONST    2 (2) 
      19 CALL_FUNCTION   3 (3 positional, 0 keyword pair) 
      22 CALL_FUNCTION   1 (1 positional, 0 keyword pair) 
      25 RETURN_VALUE 

沒有跳到那裏。沒有跳轉==沒有迭代。

+0

它在內部 - 開發人員不使用給定任務的迭代。在Python 2.x中直接使用'range()'會列出一個列表,儘管內部使用相同的原則,但是沒有人會考慮'迭代'。 – zwer

+0

@Uriel - 你是否願意指出在上面的代碼中顯示迭代的可選代碼? 'while'循環是迭代的定義... – zwer

+0

我不能相信我必須引用SO上的基本編程101定義:_Iteration在計算機編程中是一個過程,其中一組指令或結構以指定次數的順序重複或直到滿足條件。你不能沒有跳躍的迭代,而不是在經典的計算機硬件上。如果你要爭辯說,抽象迭代被認爲是應用級別的迭代,那麼'2 * 2'就是一個迭代......有你的方式,我不是在這裏爭論也不在教。 – zwer

0

你可以這樣做:

>>> list(range(200))[1::2] 
+1

沒有理由生成整個200元素列表只是爲了後來切片,讓'range()'做你的出價。 – zwer

+0

@zwer是的,你說得對,這確實不如你的方式有效! –