我有一个像这样的项目:
变量:
j_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
finish_act = [1, 3]
on_going = [5, 6, 7]
q_active = [2]
completion_time = [0, 0, 5, 0, 12, 12, 0, 0, 0, 0, 0]
代码:
t = 12
for sec in on_going:
indx = j_set.index(sec)
if completion_time[indx] == t:
finish_act.append(j_set[indx])
on_going.remove(j_set[indx])
print(finish_act)
print(on_going)
目标是在特定时间段,如果活动在时间t
结束,则应将其添加到finish_act
。
如果完成了多个活动,则应将这些活动添加到finish_act
中。
在我到目前为止的代码中,5 and 6
中的两个on_going
都是在t = 12
的基础上基于completion_time
完成的。但是使用此代码,只能选择其中一个并将其添加到finish_act
中。
是否有一种方法可以升级到目前为止的代码,以便将此类情况考虑在内?
任何需要阅读的帮助/建议/材料将不胜感激!谢谢!
预期输出:
finish_act = [1, 3, 5, 6]
on_going = [7]
答案 0 :(得分:1)
我将使用带有lambda的过滤器来选择我们要附加到finish_act
列表中的值。然后,您可以遍历相同的列表并从on_going
中删除项目。
>>> on_time = list(
... filter(lambda x: completion_time[j_set.index(x)] == t, on_going)
... )
>>> finish_act.extend(on_time)
>>> [on_going.remove(x) for x in on_time]
[None, None]
请注意,您需要捕获ValueError和IndexError异常才能遵循最佳实践。
答案 1 :(得分:0)
您可以将两个列表添加为一个:
list_final = list1 + list2
然后,您可以根据需要洗牌:
import random
random.shuffle(list_final)
很抱歉,如果这没有帮助您,但希望能帮助您。