2017-05-25 17 views
-4

私のコンピュータの先生が私たちに問題を割り当てました:反復を使わずに最初の100個の奇数のリストを作る必要があります。 私は完全に立ち往生しています。Python 3:繰り返しなしで奇数のリストを作る

あなたはあなたのためにリストを生成するために rangeを使用することができます
+0

答え= [1、3、5、7、...]。このようなことを一度書き出すことは、ループ構造の利点を教えてくれます。 –

答えて

1

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

あなたは、Python 2.xの上のリストにそれをオンにする必要はありません

UPDATE

はい、listrange()イテレータを回すと、基本的にリストを埋めるために反復を実行しますが、それは言語実装レベルだ - あなたは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 - 上記のコードで反復を示すoptコードを指すのは親切でしょうか? 'while'ループは繰り返しの定義です... – zwer

+0

私は基本的なプログラミング101の定義をSOに引用しなければならないとは思えません:_Iterationは、コンピュータプログラミングの文脈では、構造体は、指定された回数だけ、条件が満たされるまで繰り返します。クラシックなコンピュータハードウェアではなく、ジャンプなしで繰り返しを行うことはできません。そして抽象化された反復がアプリケーションレベルで反復とみなされていると主張するなら、 '2 * 2'は繰り返しです...あなたのやり方で、私は議論も教えもしません。 – zwer

0

あなたが好きな何かを行うことができます:

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

後でスライスするために200要素リスト全体を生成する理由はなく、 'range()'はあなたの入札を行います。 – zwer

+0

@zwerはい、そうです、これは実際にあなたの方法よりも効果がありません! –

関連する問題