1

膨大な量の数値を返す for ループ ステートメントがあります (少し誇張しています :)。50 番目の結果で停止するように指示するにはどうすればよいですか?

縫い目は十分に単純です。しかし、解決策を見つけることができません。ここで使用されている多くのモジュールを使用できません。基本的な数学モジュールでさえ、使用できるものに制限があります。可能であれば、あなたの答えは非常に初歩的なものにしてください。ありがとうございました

パイソンを使用。

例: range(0, 99999999) または f = 's' * 50000000

.. これら 2 つの結果を 50 個だけ出力します。

4

2 に答える 2

2

を使用enumerateして、for ループの値とともにインデックスを取得できます。ここではリストを使用していますが、ある種のイテレータを使用していると想定していますmylist[:50]。たとえば、これは 50 番目のエントリまで出力されます。

for i, val in enumerate(range(600)):
    if i == 50:
        break
    print i

または、50 個の値ごとに出力するには

for i, val in enumerate(range(600), start=1):
    if i % 50 == 0:
        print val

while ループも使用できます。

i = 0
some_iterator = iter(range(600))
while i < 50:
    print some_iterator.next()
    i += 1
于 2013-05-19T19:58:22.360 に答える
1

使用したいitertools.islice

In [22]: import itertools as it

In [23]: for elem in it.islice(it.count(), 50):
   ....:     print elem,
   ....:     
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

itertools.count()無限イテレータであることに注意してください。

別の可能性は、次を使用することitertools.takewhileです。

In [24]: for elem in it.takewhile(lambda x: x < 50, it.count()):
   ....:     print elem,
   ....:     
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

明らかに、シーケンスではなくイテラブルを使用していると想定しています。シーケンスがある場合は、組み込みのスライス構文を使用できます。

sequence[:50]

ただし、これには最初に完全なシーケンスを構築する必要があります。これは、場合によっては実行できない場合もあります。

于 2013-05-19T20:13:38.633 に答える