Python: 利用字典列表中的值生成特定组合进行时间表规划

2024-09-29 19:32:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试构建一个Python程序来帮助我安排我的时间表,这样我就可以在大学里得到最多的休息日(最少的上学日)。你知道吗

用户应输入多个课程(课程a、课程B、课程C),他们将收到一个建议的组合列表,该列表将使他们在没有时间冲突的情况下最少上学日(例如课程a(L1、T1)、课程B(L3、T3B)、课程C(L2、T2C))

我从我的大学网站上搜集了一些关于课程的信息,现在我被困了。。这是我刮的东西的样本。你知道吗

{'Lectures':{'L1 (2196)': 'Mo04:30PM-05:50PM Fr12:00PM-01:20PM'}, 'Tutorial': {'T1 (2198)': 'Th06:00PM-06:50PM', 'T2 (2200)': 'Mo03:00PM-03:50PM'}, 'Lab': {}}
{'Lectures': {'L1 (2201)': 'Tu09:00AM-10:20AM Th09:00AM-10:20AM', 'L2 (2203)': 'Tu12:00PM-01:20PM Th12:00PM-01:20PM', 'L3 (2205)': 'Tu03:00PM-04:20PM Th03:00PM-04:20PM', 'L4 (2207)': 'Tu01:30PM-02:50PM Th01:30PM-02:50PM', 'L5 (2209)': 'Tu10:30AM-11:50AM Th10:30AM-11:50AM', 'L6 (2211)': 'Tu04:30PM-05:50PM Th04:30PM-05:50PM'}, 'Tutorial': {'T1A (2213)': 'Mo05:30PM-06:20PM', 'T1B (2215)': 'We06:00PM-06:50PM', 'T2A (2216)': 'Fr12:00PM-12:50PM', 'T2B (2217)': 'Fr01:30PM-02:20PM', 'T3A (2218)': 'We04:30PM-05:20PM', 'T3B (2219)': 'Th12:00PM-12:50PM', 'T4A (2220)': 'Fr03:30PM-04:20PM', 'T4B (2221)': 'Mo02:00PM-02:50PM', 'T5A (2222)': 'Fr12:00PM-12:50PM', 'T5B (2223)': 'Mo06:00PM-06:50PM', 'T6A (2224)': 'We06:00PM-06:50PM', 'T6B (2225)': 'Mo02:00PM-02:50PM'}, 'Lab': {}}

最外面的字典是课程,里面有三个字典,分别命名为“讲座”、“教程”、“实验室”,不是所有的课程都有这三个,但是只要有一个或多个课时,你就必须按照时间表来安排。我想创建这些课程的组合,然后检查是否发生时间冲突,如果是的垃圾这些组合。但是,我不确定如何创建这样的组合来确保这一点。你知道吗

编辑

我的最终目标是列一张这样的清单:

course A={'L':{'L1':'Time','L2':'Time'},'T':{'T1':'Time','T2':'Time'},'LAB':{'LAB1':'Time}}
course B={'L':{'L1':'Time'},'T':{'T1':'Time','T2':'Time'},'LAB':{'LAB1':'Time}}

我想要一个这样的组合

CourseA(L1,T1,LAB1)CourseB(L1,T1)
CourseA(L1,T2,LAB1)CourseB(L1,T1)
CourseA(L2,T1,LAB1)CourseB(L1,T1)
CourseA(L1,T1,LAB1)CourseB(L1,T2)
CourseA(L1,T2,LAB1)CourseB(L1,T2)
CourseA(L2,T1,LAB1)CourseB(L1,T2)

因此,我可能会通过跟踪会话的值(time)来进一步过滤掉那些有时间冲突的会话。你知道吗


Tags: l1列表time时间时间表大学课程t1
1条回答
网友
1楼 · 发布于 2024-09-29 19:32:02

为这样的嵌套列表生成排列有点棘手。你知道吗

为了让您开始,这里介绍如何为一些嵌套列表生成所有可能的排列。你需要试着找出如何将这种模式应用于你的问题。你知道吗

import itertools
# a list with 4 categories
a = [[1,2,3],[4,5,6],[7,8,9], [10,11,12]]

# this function will help generate permutations
prod = itertools.product

# combine the first two columns. The for loop below assumes
# that the previous result is a list.
result = list(prod(a[0],a[1]))

for x in a[2:]:
    result = list(prod(x, result))
    result = [[r[0]] + list(r[1]) for r in result]

print(result)

该程序的输出为:

[[10, 7, 1, 4], [10, 7, 1, 5], [10, 7, 1, 6], [10, 7, 2, 4], [10, 7, 2, 5], 
[10, 7, 2, 6], [10, 7, 3, 4], [10, 7, 3, 5], [10, 7, 3, 6], [10, 8, 1, 4], ... 
[12, 9, 1, 5], [12, 9, 1, 6], [12, 9, 2, 4], [12, 9, 2, 5], [12, 9, 2, 6], 
[12, 9, 3, 4], [12, 9, 3, 5], [12, 9, 3, 6]]

现在您需要生成表示每个类的排列,然后对这些列表执行相同的操作。你知道吗

相关问题 更多 >

    热门问题