如何在python中实现嵌套的增量循环



我在java脚本中有一些逻辑,需要在python、中实现

就像我们有三个参数的经典循环一样,初始化、条件和增量、

js示例代码:

for(let i=0; i< waypoints.length; i++) {
const wayPoints_status = [];
if(a == condition) {
if(i==0) {
wayPoints_status[0].push({id: waypoints[0].id, status: 'executing'});
for(var j=1;j< waypoints.length; j++){
wayPoints_status.push({id:waypoints[j].id, 'status': 'pending'});
}
return wayPoints_status
}
}
setTimeInterval(function(){
if(a == condition) {
if(i>0 && waypoints_status.length>0) {
for(var k=0; k<waypoints_status.length; k++) {
if(wayPoints_status[k].status == 'executing') {
let charCheck = k;
wayPoints_status[charCheck].status =  'completed';
wayPoints_status[charCheck+1].status = 'executing';
}

}

}
}

},1000)
}

我已经在python 中尝试了以下代码

waypoints_data = self.waypoints
waypoint_status_list = []
for index, value in enumerate(waypoints_data):
# if (self.mission_status_from_ui == MESSAGE_CONSTANTS["mission_status"]["EXECUTING"]):
self.logger.debug(index)
self.logger.debug(value)
if (index == 0):
waypoint_status={
"id": value["id"],
"status": "executing"
}
waypoint_status_list.append(waypoint_status)
self.logger.debug(waypoint_status_list)

如何递增i值,以及如何以递增的方式添加嵌套循环,即j和k。

非常感谢您的快速帮助

如果您只想更新状态,那么您可以:

import random
import time
def update_waypoint_statuses(waypoint_statuses):
prior_waypoint_status = {"id": None, "status": None}
for current_waypoint_status in waypoint_statuses:
prior_waypoint_status["status"] = "completed"
current_waypoint_status["status"] = "executing"
prior_waypoint_status = current_waypoint_status
time.sleep(random.uniform(1.0, 5.0))
prior_waypoint_status["status"] = "completed"
waypoints = [{"id": 1},{"id": 2},{"id": 3},{"id": 4},{"id": 5}]
waypoint_statuses = [{"id": waypoint["id"], "status": "pending"} for waypoint in waypoints]
update_waypoint_statuses(waypoint_statuses)

这将在1到5秒的随机化延迟上循环通过路点,并相应地更新状态。如果你想看到这种情况发生,你可以添加几个打印/日志语句:

def update_waypoint_statuses(waypoint_statuses):
prior_waypoint_status = {"id": None, "status": None}
for current_waypoint_status in waypoint_statuses:
prior_waypoint_status["status"] = "completed"
current_waypoint_status["status"] = "executing"
prior_waypoint_status = current_waypoint_status
print(waypoint_statuses, end="r", flush=True)
time.sleep(random.uniform(1.0, 5.0))
prior_waypoint_status["status"] = "completed"
print(waypoint_statuses, end="r", flush=True)

如果你想在主程序执行";其他东西";,你可以添加一个ThreadPoolExecutor(),然后你可以从你的代码主线打印/记录。

import concurrent.futures
import random
import time
def update_waypoint_statuses(waypoint_statuses):
prior_waypoint_status = {"id": None, "status": None}
for current_waypoint_status in waypoint_statuses:
prior_waypoint_status["status"] = "completed"
current_waypoint_status["status"] = "executing"
prior_waypoint_status = current_waypoint_status
time.sleep(random.uniform(1.0, 5.0))
prior_waypoint_status["status"] = "completed"
waypoints = [{"id": 1},{"id": 2},{"id": 3},{"id": 4},{"id": 5}]
waypoint_statuses = [{"id": waypoint["id"], "status": "pending"} for waypoint in waypoints]
with concurrent.futures.ThreadPoolExecutor() as executor:
future = executor.submit(update_waypoint_statuses, waypoint_statuses)
while waypoint_statuses[-1]["status"] != "completed":
print(waypoint_statuses, end="r", flush=True)
time.sleep(0.1)
print(waypoint_statuses, end="r", flush=True)
print("n")

取决于什么";否则";你可能会尝试使用waypoint_statuses,你可能也想研究threading.Lock(),但我认为这里可能不需要它。如果你的印刷品被弄乱了,它应该在下一次迭代中重新整理。

最新更新