第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查找范圍值列表中的空白

查找范圍值列表中的空白

MMMHUHU 2023-07-27 09:53:35
我在其他編程語言(ruby、C++、JS 等)中發(fā)現(xiàn)了許多類似的問題,但在 Python 中卻沒有。因為Python有例如itertools我想知道我們是否可以在Python中更優(yōu)雅地做同樣的事情。假設(shè)我們有一個“完整范圍”,[1,100]然后是“完整范圍”內(nèi)/匹配“完整范圍”的范圍子集:[10,50][90,100][1,9]在本例中,我們?nèi)绾翁崛∥锤采w的位置[51,89]?這是一個玩具示例,在我的真實數(shù)據(jù)集中,范圍高達(dá)數(shù)千。
查看完整描述

3 回答

?
動漫人物

TA貢獻(xiàn)1815條經(jīng)驗 獲得超10個贊

這是一個使用以下方法的巧妙解決方案itertools.chain:我假設(shè)輸入范圍不重疊。如果確實如此,則需要首先使用范圍并集算法對其進(jìn)行簡化。

from itertools import chain


def range_gaps(a, b, ranges):

? ? ranges = sorted(ranges)

? ? flat = chain((a-1,), chain.from_iterable(ranges), (b+1,))

? ? return [[x+1, y-1] for x, y in zip(flat, flat) if x+1 < y]

range_gaps(1, 100, [[10, 50], [90, 100]])個例子:

  • 首先對范圍進(jìn)行排序,以防它們尚未按順序排列。如果保證它們是有序的,則不需要這一步。

  • 然后flat是一個迭代器,它將給出序列0, 10, 50, 90, 100, 101

  • 由于flat是惰性評估的,并通過迭代消耗它,zip(flat, flat)因此給出了像 之類的對序列(0, 10), (50, 90), (100, 101)。

  • 所需的范圍就像(1, 9), (51, 89)和 的情況一樣(100, 101),應(yīng)該給出一個空范圍,因此它被丟棄。



查看完整回答
反對 回復(fù) 2023-07-27
?
哈士奇WWW

TA貢獻(xiàn)1799條經(jīng)驗 獲得超6個贊

假設(shè)列表僅包含整數(shù),并且子范圍按遞增順序且不重疊,您可以使用以下代碼。


此代碼將一一獲取所有子范圍,并將與原始完整范圍及其之前的子范圍進(jìn)行比較,以找到丟失的范圍。


[start,end]=[1,100]

chunks=[[25,31],[7,15],[74,83]]


print([r for r in [[start,chunks[0][0]-1] if start!=chunks[0][0] else []] + [[chunks[i-1][1]+1, chunks[i][0]-1] for i in range(1,len(chunks))]+[[chunks[-1][1]+1,end] if end!=chunks[-1][1] else []] if r])

輸入


[1,100]

[[7,15],[25,31],[74,83]]

輸出


[[1, 6], [16, 24], [32, 73], [84, 100]]

如果不能保證子范圍的遞增順序。您可以包含以下行來對塊進(jìn)行排序。


chunks.sort(key=lambda x: x[0])


查看完整回答
反對 回復(fù) 2023-07-27
?
眼眸繁星

TA貢獻(xiàn)1873條經(jīng)驗 獲得超9個贊

這是一個通用的解決方案:


def gap(N, ranges):

    ranges=[(min1, max1), (min2, (max2), ......, (minn, maxn)]

    

    original=set(range(N))

           

    for i in ranges:

        original=original-set(range(i[0], i[1]))


    return original


查看完整回答
反對 回復(fù) 2023-07-27
  • 3 回答
  • 0 關(guān)注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號