1

我有一个 for 循环语句,它返回数以百万计的数字(可以夸大其词:)。我如何告诉它在第 50 个结果时停止?

接缝很简单。虽然找不到解决方案。不能使用很多我在这里看到的模块。即使在基本的数学模块中,我们也受限于我们可以使用的东西。所以如果可能的话,请在你的回答中非常基本。谢谢你

使用蟒蛇。

例如 range(0, 99999999) 或 f = 's' * 50000000

.. 仅打印这两个中的 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 回答