重复执行for循环的迭代

33

如果出于某种原因我想要重复相同的迭代,我该如何在Python中实现?

for eachId in listOfIds:
    #assume here that eachId conatins 10
    response = makeRequest(eachId) #assume that makeRequest function request to a url by using this id
    if response == 'market is closed':
       time.sleep(24*60*60) #sleep for one day

现在当函数从睡眠中醒来一天后(市场(货币交易市场)开放),我想从eachId = 10继续我的for循环,而不是从eachId = 11开始,因为eachId = 10还没有像市场已关闭一样被处理,非常感谢任何帮助。


save the content into a list. - JBernardo
4
他的意思是如何在某次迭代中不增加For循环的列表计数器。 - bcoughlan
4个回答

48

按照以下方式处理:

for eachId in listOfIds:
    successful = False
    while not successful:        
        response = makeRequest(eachId)
        if response == 'market is closed':
            time.sleep(24*60*60) #sleep for one day
        else:
            successful = True

你的问题标题就是线索。通过迭代可以实现重复,在这种情况下,你可以简单地使用嵌套的while来完成。


1
感谢您的帮助,嵌套 while 循环,啊啊啊,为什么我没想到呢 :p - Aamir Rind

8

使用 while 循环吗?

counter = 0
while counter < len(listOfIds):
  # do processing
  counter = counter + 1

如果你收到“市场已关闭”的消息,就不要增加。


2
i = 0
while i < len(listOfIds):
    eachId = listOfIds[i]
    #assume here that eachId conatins 10
    response = makeRequest(eachId) #assume that makeRequest function request to a url by using this id
    if response == 'market is closed':
       time.sleep(24*60*60) #sleep for one day
    else:
       i += 1

0
for eachId in listOfIds:
    while makeRequest(eachId) == 'market is closed':
       time.sleep(24*60*60) #sleep for one day

正如 @David 所添加的,如果您不需要捕获 response


除非需要捕获“响应(response)”,否则必须尽可能简洁。 - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接