返回信息流是这样的,我发现用其他语言可以很容易的实现如下循环:
for (int i = n; i > 0; i = i/2)
然而我不知道如何在python里实现同样的for loop, 我只能想到用while循环
i = n
while (i > 0):
i = i/2
比较好奇Python里面有什么办法可以也像上面的for loop那样一条语句解决问题么?
这是一条镜像帖。来源:北邮人论坛 / python / #15329同步于 2016/8/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
请教一个有关循环的问题
cooji100
2016/8/3镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
就这样挺好的。
for循环的本意是用来访问一个集合中的每个元素的,比如for x in ["a", "b", "c"], 有时候我们把range(10)也当作一个集合:[0,1,2,3,4,5,6,7,8,9]
但是for (int i = n; i > 0; i = i/2)看上去更像是状态跳转,直到循环条件i>0不成立为止。这看上去不像是“访问一个集合”的操作。
如果一定要把这里面遇到的i看成一个集合来迭代的话,可以这样:
def cut_in_half_until_zero(n):
while n > 0:
yield n
n = n // 2
for i in cut_in_half_until_zero(100):
print(i) # 100, 50, 25, 12, 6, 3, 1
如果是Haskell的粉丝的话,自己写个iterate函数,再用itertools里的takewhile
def iterate(f, init):
while True:
yield init
init = f(init)
from itertools import takewhile
for i in takewhile(lambda x: x>0, iterate(lambda x: x//2, 10)):
print(i) # 100, 50, 25, 12, 6, 3, 1
【 在 nuanyangyang 的大作中提到: 】
: 就这样挺好的。
: for循环的本意是用来访问一个集合中的每个元素的,比如for x in ["a", "b", "c"], 有时候我们把range(10)也当作一个集合:[0,1,2,3,4,5,6,7,8,9]
: 但是for (int i = n; i > 0; i = i/2)看上去更像是状态跳转,直到循环条件i>0不成立为止。这看上去不像是“访问一个集合”的操作。
: ...................
解释的非常清楚,谢谢暖神!