生成器代码中的 ListComp 太复杂
ListComp inside generator code too complex
这是一段非常神秘的代码,我读过但无法理解。我就post这里,求高手帮忙。如果给定一些会议日程,即将决定最少需要多少个会议室。
例如,如果会议安排是 - [[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)) #
方法很简单。您需要一个计数器,它在事件开始时递增,在事件结束时递减。该计数器的最大值将为您提供所需的房间数。
“令人困惑”的声明 for i, v in sorted(x for i, j in intervals for x in [[i,1], [j,-1]])
本质上是这样做的:
- 对于每个间隔
i,j
,它将其分为 [i,1]
和 [j,-1]
- 创建所述间隔的列表
- 排序并遍历
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)
这是一段非常神秘的代码,我读过但无法理解。我就post这里,求高手帮忙。如果给定一些会议日程,即将决定最少需要多少个会议室。
例如,如果会议安排是 - [[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)) #
方法很简单。您需要一个计数器,它在事件开始时递增,在事件结束时递减。该计数器的最大值将为您提供所需的房间数。
“令人困惑”的声明 for i, v in sorted(x for i, j in intervals for x in [[i,1], [j,-1]])
本质上是这样做的:
- 对于每个间隔
i,j
,它将其分为[i,1]
和[j,-1]
- 创建所述间隔的列表
- 排序并遍历
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)