for循环中的扩展条件

时间:2016-01-13 03:10:29

标签: python python-2.7 range

我希望有一个类似双重条件的东西,我想包含在forloop中,为了减少计算时间,我想做类似以下的事情:

for i WHERE i % 2 == 0 in range(0,(realbignumber/2)):
    if i % realbignum == 0: do some stuff

我大多不确定正确的做法'其中' forloop中的type语句?我确信可能有更好的方法来减少计算时间(我试图对realbignum进行素数因子分解)并且首先得到一个除数列表,然后检查质数。一旦我得到了i%2 == 0'其中'条款弄明白我计划实施类似于'对于我在哪里,我是素数范围......做的事情。我在python 2中工作,但也可以使用python 3方法。

2 个答案:

答案 0 :(得分:4)

使用生成器表达式,如此

for i in (num for num in xrange(realbignumber / 2) if num % 2 == 0):

对于这种特殊情况,您实际上可以在xrange本身中指定step参数,就像这样

for i in xrange(0, realbignumber / 2, 2):

请注意,我使用了xrange代替range功能。因为Python 2.x中的range函数会创建一个数字列表,而xrange只创建一个xrange object。所以xrange适用于很长的范围,因为它具有很高的内存效率。

如果输入的数字太大而不适合Python的int,那么你可以在生成器的帮助下滚动你自己的简化范围函数,就像这样

>>> def my_range(start, stop, step=1):
...     current = start
...     while current < stop:
...         yield current
...         current += step
... 
>>> [num for num in my_range(0, 10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

或者您可以使用ShadowRanger显示的itertools版本,就像这样

>>> from itertools import islice, count
>>> def bigxrange(start, stop, step=1):
...     return islice(count(start, step), (stop - start + step - 1))
... 
>>> list(bigxrange(0, 10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

答案 1 :(得分:0)

也许this Stackoverflow post可以帮到你。

使用python3,根据this discussion和此python3 documentation reference,该代码应该有效。