【问题标题】:ListComp inside generator code too complex生成器中的 ListComp 代码太复杂
【发布时间】:2021-02-01 20:59:53
【问题描述】:

这是一段非常神秘的代码,我读过但无法理解。我将在这里发布并寻求专家帮助。如果给定一些会议时间表,它将决定最少需要多少个会议室。

例如,如果会议日程是 - [[1,10], [5,12],[10,15]] 那么它至少需要 2 个房间。

代码如下:

def mini_room(intervals):

    room, current = 0, 0
    for i, v in sorted(x for i, j in intervals for x in [[i,1], [j,-1]]):
        current += v
        room = max(room, current)

print(mini_room(meetings)) # 

【问题讨论】:

    标签: python-3.x algorithm concept


    【解决方案1】:

    方法很简单。您需要一个计数器,它在事件开始时递增,在事件结束时递减。该计数器的最大值将为您提供所需的房间数。

    “令人困惑”的声明 for i, v in sorted(x for i, j in intervals for x in [[i,1], [j,-1]]) 本质上是这样做的:

    1. 对于每个间隔i,j,它将它分成[i,1][j,-1]
    2. 创建上述区间的列表
    3. 对它们进行排序并遍历它

    1 被添加到i(在[i,1] 中),因为就像我上面解释的那样,当事件开始时计数器需要增加。 1 标记新事件,并将此值添加到计数器。同样,[j,-1] 中的-1 标志着事件的结束并从计数器中减去。

    编辑:
    这是一个简化版本。

    simple = []
    for i in intervals:
        simple.append([i[0],1])
        simple.append([i[1],-1])
    simple.sort()
    counter = 0
    ans = 0
    for i in simple:
        counter += i[1]
        ans = max(ans, counter)
    print(ans)
    

    【讨论】:

    • 感谢您的详细解释...需要时间来消化...非常感谢。可以translate 用简单的循环语法来演示吗?
    • @annie2020 也添加了这一点
    猜你喜欢
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    相关资源
    最近更新 更多