私のコンピュータの先生が私たちに問題を割り当てました:反復を使わずに最初の100個の奇数のリストを作る必要があります。 私は完全に立ち往生しています。Python 3:繰り返しなしで奇数のリストを作る
あなたはあなたのためにリストを生成するためにrange
を使用することができます
私のコンピュータの先生が私たちに問題を割り当てました:反復を使わずに最初の100個の奇数のリストを作る必要があります。 私は完全に立ち往生しています。Python 3:繰り返しなしで奇数のリストを作る
あなたはあなたのためにリストを生成するためにrange
を使用することができます
:
first_hundred_odd = list(range(1, 200, 2)) # get an iterator in 1..200 range with step of 2
あなたは、Python 2.xの上のリストにそれをオンにする必要はありません
UPDATE:
はい、list
にrange()
イテレータを回すと、基本的にリストを埋めるために反復を実行しますが、それは言語実装レベルだ - あなたは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
ここにはジャンプがありません。ジャンプなし==反復なし。
内部的には、開発者は与えられたタスクである繰り返しを使用していません。 Python 2.xのストレート・アウトで 'range()'を使うと、リストが吐き出され、同じ原理を内部的に使用しているにもかかわらず、誰もその '反復'を考慮しません。 – zwer
@Uriel - 上記のコードで反復を示すoptコードを指すのは親切でしょうか? 'while'ループは繰り返しの定義です... – zwer
私は基本的なプログラミング101の定義をSOに引用しなければならないとは思えません:_Iterationは、コンピュータプログラミングの文脈では、構造体は、指定された回数だけ、条件が満たされるまで繰り返します。クラシックなコンピュータハードウェアではなく、ジャンプなしで繰り返しを行うことはできません。そして抽象化された反復がアプリケーションレベルで反復とみなされていると主張するなら、 '2 * 2'は繰り返しです...あなたのやり方で、私は議論も教えもしません。 – zwer
あなたが好きな何かを行うことができます:
>>> list(range(200))[1::2]
後でスライスするために200要素リスト全体を生成する理由はなく、 'range()'はあなたの入札を行います。 – zwer
@zwerはい、そうです、これは実際にあなたの方法よりも効果がありません! –
答え= [1、3、5、7、...]。このようなことを一度書き出すことは、ループ構造の利点を教えてくれます。 –