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

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

拆分整數(shù)列表,使它們產(chǎn)生具有最小差異的子列表

拆分整數(shù)列表,使它們產(chǎn)生具有最小差異的子列表

慕無忌1623718 2023-09-12 20:02:26
我將如何拆分整數(shù)列表,以便將它們放在子列表中且差異最???例如[4,1,5,3] --> [[1], [3,4,5]],長度 2[4,2,1,3] --> [[1,2,3,4]],長度 1[5,2,7,6,3,9] --> [[2,3], [5,6], [9]],長度 3[1,2,3,4,5,6,8,9,10] --> [[1,2,3,4,5,6], [8,9,10]],長度 2。目前的方法是def split(l):     res = []     n = len(l)     l.sort()     # If the list is just consecutive integers return 1    if l == list(range(min(l), max(l)+1)):         return 1      for l0, l1 in zip(l, l[1:]):         if abs(l0 - l1) <= 1:            res.append([l0, l1])     return len(res)這適用于前三種情況,但最后一種失敗了...我認為問題是在循環(huán)中我只是通過兩個連續(xù)整數(shù)的差異進行調(diào)節(jié)...
查看完整描述

3 回答

?
繁星淼淼

TA貢獻1775條經(jīng)驗 獲得超11個贊

如果您被允許使用外部包,則more_itertools具有split_when方法,它可以滿足您的需求:

import more_itertools

lst = [1,2,3,4,5,6,8,9,10]

lst.sort()

splitted = list(more_itertools.split_when(lst, lambda x, y: abs(x-y) > 1))

print(splitted)

輸出:


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


查看完整回答
反對 回復(fù) 2023-09-12
?
滄海一幻覺

TA貢獻1824條經(jīng)驗 獲得超5個贊

我只是檢查兩個數(shù)字之間的差是否大于 1:


def mySplit(lst):

    res = []


    lst.sort()

    subList = [lst[0]]

    for i in range(1, len(lst)):

        prev, cur = lst[i-1], lst[i]

        if cur - prev > 1:

            res.append(subList)

            subList = []

        subList.append(cur)

 

    res.append(subList)

    return res



tests = ([4,1,5,3], [4,2,1,3], [5,2,7,6,3,9], [1,2,3,4,5,6,8,9,10,13])

for test in tests:

    print(mySplit(test))

出去:


[[1], [3, 4, 5]]

[[1, 2, 3, 4]]

[[2, 3], [5, 6, 7], [9]]

[[1, 2, 3, 4, 5, 6], [8, 9, 10], [13]]


查看完整回答
反對 回復(fù) 2023-09-12
?
慕桂英3389331

TA貢獻2036條經(jīng)驗 獲得超8個贊

numpy使用:運行速度非??烨液喍痰慕鉀Q方案
(一旦使用安裝numpy python -m pip install numpy)。

在線嘗試一下!

import numpy as np


for l in [

    [4,1,5,3],

    [4,2,1,3],

    [5,2,7,6,3,9],

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

]:

    a = np.sort(l)

    res = np.split(a, np.flatnonzero(np.abs(np.diff(a)) > 1) + 1)

    

    print('input', l, 'sorted', a, '\n', 'result', res)

輸出:


input [4, 1, 5, 3] sorted [1 3 4 5]

 result [array([1]), array([3, 4, 5])]

input [4, 2, 1, 3] sorted [1 2 3 4]

 result [array([1, 2, 3, 4])]

input [5, 2, 7, 6, 3, 9] sorted [2 3 5 6 7 9]

 result [array([2, 3]), array([5, 6, 7]), array([9])]

input [1, 2, 3, 4, 5, 6, 8, 9, 10] sorted [ 1  2  3  4  5  6  8  9 10]

 result [array([1, 2, 3, 4, 5, 6]), array([ 8,  9, 10])]


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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