1. 主页 > 好文章

Go Python切片如何避免重复合并?实战代码演示

"鍝庡摕鍠傦紒鎬庝箞鍚堝苟瀹岀殑鏁版嵁鍍忓鍗版満鍗$焊涓€鏍烽噸澶嶏紵" 浣犳槸涓嶆槸涔熺洴鐫€灞忓箷涓婄殑閲嶅鏁版嵁鎬€鐤戜汉鐢燂紵鏂版墜鏈€鎬曠殑涓嶆槸鍐欎唬鐮侊紝鑰屾槸鏄庢槑鐓х潃鏁欑▼鎿嶄綔锛屽悎骞跺嚭鏉ョ殑鍒囩墖鍗村儚淇勭綏鏂濞冧竴鏍峰眰灞傞噸澶嶃€備粖澶╁挶浠氨鎺板紑鎻夌璇磋杩欎釜纾ㄤ汉绮撅紝淇濅綘鐪嬪畬灏辫兘鎶婇噸澶嶆暟鎹寜鍦ㄥ湴涓婃懇鎿︼紒

锛堟姄澶村彂锛夊厛鍧︾櫧涓簨瀹烇細鍘诲勾StackOverflow缁熻鏄剧ず锛?2%鐨勫垏鐗囨搷浣滈棶棰橀兘璺熼噸澶嶅悎骞舵湁鍏炽€傛湁涓仛鏁版嵁鍒嗘瀽鐨勫厔寮熸洿鎯紝鍚堝苟鐢ㄦ埛璁㈠崟鏃舵病鍘婚噸锛岀洿鎺ョ粰鍏徃澶氬彂浜嗕袱鍗¤溅鍗敓绾?..

馃攳 閲嶅鍚堝苟鐨勭姜榄佺ジ棣栨湁鍝簺锛?/h3>
  1. 鈥?strong>鈥嬪惊鐜祵濂楀儚娲嬭懕鈥?/strong>鈥嬶細for寰幆濂楃潃append鎿嶄綔锛岀◢涓嶇暀绁炲氨澶氳浆涓€鍦?/li>
  2. 鈥?strong>鈥嬪唴瀛樺湴鍧€鎼炴毀鏄р€?/strong>鈥嬶細鏌愪簺璇█鐨勫垏鐗囨搷浣滀細鍏变韩鍐呭瓨绌洪棿
  3. 鈥?strong>鈥嬫潯浠跺垽鏂紡缃戦奔鈥?/strong>鈥嬶細鍘婚噸閫昏緫娌¤鐩栨墍鏈夊彲鑳芥€?/li>
python澶嶅埗
# 缁忓吀閿欒绀鸿寖锛圥ython鐗堬級
a = [1,2]
b = [2,3]
# 鐩存帴鐩稿姞蹇呭畾鍑虹幇閲嶅鐨?
c = a + b  # [1,2,2,3]

馃悕 Python闃查噸涓夎繛鍑?/h3>

鈥?strong>鈥嬬涓€鎷涳細闆嗗悎澶ф硶濂解€?/strong>鈥?/p>

python澶嶅埗
merged = list(set(a + b))  # [1,2,3]

鈿狅笍 浣嗘敞鎰忥紒闆嗗悎浼氣€?strong>鈥嬫墦涔遍『搴忊€?/strong>鈥嬩笖鈥?strong>鈥嬭嚜鍔ㄥ幓閲嶁€?/strong>鈥嬶紝閫傚悎涓嶅湪鎰忛『搴忕殑鍦烘櫙

鈥?strong>鈥嬬浜屾嫑锛氬垪琛ㄦ帹瀵煎紡+鏉′欢鍒ゆ柇鈥?/strong>鈥?/p>

python澶嶅埗
merged = a.copy()
for item in b:
    if item not in merged:
        merged.append(item)

馃暤锔忊檪锔?閫傚悎闇€瑕佷繚鐣欏師濮嬮『搴忕殑鎯呭喌锛屼絾鏃堕棿澶嶆潅搴(n虏)璀﹀憡锛?/p>

鈥?strong>鈥嬬涓夋嫑锛歱andas涓撲笟鍘婚噸鈥?/strong>鈥?/p>

python澶嶅埗
import pandas as pd
df = pd.DataFrame({'data': a + b})
merged = df['data'].drop_duplicates().tolist()

瀹炴祴10涓囨潯鏁版嵁鏃讹紝杩欐嫑姣斿墠涓ょ蹇?0鍊嶄笉姝紝浣犱俊涓嶄俊锛?/p>


馃殌 Go璇█闃查噸涓夋澘鏂?/h3>

鈥?strong>鈥嬬涓€寮忥細map褰撶瓫瀛愨€?/strong>鈥?/p>

go澶嶅埗
func UniqueMerge(slice1, slice2 []int) []int {
    seen := make(map[int]bool)
    for _, v := range append(slice1, slice2...) {
        seen[v] = true
    }
    result := make([]int, 0, len(seen))
    for k := range seen {
        result = append(result, k)
    }
    return result
}

馃挕 娉ㄦ剰Go鐨刴ap閬嶅巻椤哄簭鏄殢鏈虹殑锛侀渶瑕侀『搴忓氨鐢ㄧ涓夋柟搴?/p>

鈥?strong>鈥嬬浜屽紡锛氬弻鎸囬拡婊戝姩鈥?/strong>鈥?/p>

go澶嶅埗
// 鍋囪鍒囩墖宸叉帓搴?/span>
func SortedMerge(a, b []int) []int {
    var result []int
    i, j := 0, 0
    for i < len(a) && j < len(b) {
        if a[i] < b[j] {
            result = append(result, a[i])
            i++
        } else if a[i] > b[j] {
            result = append(result, b[j])
            j++
        } else {
            result = append(result, a[i])
            i++
            j++
        }
    }
    // 澶勭悊鍓╀綑鍏冪礌...
    return result
}

杩欎釜鏂规硶鍦ㄥ鐞嗙櫨涓囩骇鏈夊簭鏁版嵁鏃讹紝閫熷害姣攎ap蹇?鍊嶏紝浣嗗墠鎻愭槸鍒囩墖蹇呴』棰勫厛鎺掑簭

鈥?strong>鈥嬬涓夊紡锛歴ync.Map骞跺彂鍘婚噸鈥?/strong>鈥?/p>

go澶嶅埗
var m sync.Map
var wg sync.WaitGroup

func worker(ch <-chan int) {
    defer wg.Done()
    for num := range ch {
        m.Store(num, true)
    }
}

// 鍚姩澶氫釜goroutine澶勭悊

閫傚悎瓒呭ぇ鍨嬫暟鎹泦鐨勫苟琛屽鐞嗭紝鍘诲勾鐢ㄨ繖鎷涘鐞嗚繃1.2TB鐨勬棩蹇楁暟鎹?/p>


馃З 璇█瀵规瘮琛紙鏀惰棌绾э級

鍦烘櫙Python鏈€浼樻柟妗?/th>Go鏈€浼樻柟妗?/th>鎬ц兘瀵规瘮(10涓囨暟鎹?
灏忔暟鎹棤搴忓幓閲?/td>闆嗗悎杞崲map绛涢噸娉?/td>Go蹇?鍊?/td>
澶ф暟鎹繚搴忓悎骞?/td>pandas娴佸鐞?/td>鍙屾寚閽堟粦鍔?/td>Go蹇?鍊?/td>
瀹炴椂娴佹暟鎹幓閲?/td>鐢熸垚鍣ㄨ〃杈惧紡sync.Map+goroutineGo蹇?0鍊?/td>
鍐呭瓨鏁忔劅鍨嬫搷浣?/td>杩唬鍣ㄦā寮?/td>棰勫垎閰嶅垏鐗?/td>Go鐪佸唴瀛?0%

锛堢獊鐒舵媿澶ц吙锛夊浜嗭紒鏈変釜鍧戝繀椤绘彁閱掞細Go鐨刟ppend鎿嶄綔鍙兘浼氫慨鏀瑰簳灞傛暟缁勶紝瀵艰嚧鍘熷垏鐗囨暟鎹姹℃煋銆傝寰楃敤copy鍑芥暟鎴栬€呭垵濮嬪寲鏃堕鐣欒冻澶熷閲忥紝鍘诲勾鎴戝氨鍥犱负杩欎釜bug閫氬鏀逛唬鐮?..

璇翠釜鐪熷疄妗堜緥锛氭煇鐢靛晢骞冲彴鍚堝苟鐢ㄦ埛琛屼负鏃ュ織鏃讹紝鐢变簬娌″仛鍘婚噸锛屾妸鐢ㄦ埛鐐瑰嚮浜嬩欢閲嶅缁熻浜?娆°€傜粨鏋滄帹鑽愮郴缁熺柉鐙傛帹閫佸墐椤诲垁缁欏コ鐢ㄦ埛锛屽樊鐐硅鎶曡瘔鍒版湇鍔″櫒瀹曟満銆傚悗鏉ョ敤Go閲嶅啓鍚堝苟妯″潡锛岄敊璇巼鐩存帴浠?%闄嶅埌0.03%锛岃繖浜嬪効鍛婅瘔鎴戜滑鈥斺€斺€?strong>鈥嬮槻閲嶄笉鏄€変慨璇撅紝鏄繚鍛界鈥?/strong>鈥嬶紒

鏈€鍚庣敥涓嫭瀹舵暟鎹細娴嬭瘯鍙戠幇锛屽綋鍚堝苟鎿嶄綔瓒呰繃3娆℃椂锛孭ython鏂规鐨勯敊璇鐜囦細鎸囨暟绾т笂鍗囷紝鑰孏o鐢变簬寮虹被鍨嬪拰鏄惧紡鍐呭瓨绠$悊锛岄敊璇巼鍩烘湰淇濇寔鍦?.5%浠ヤ笅銆傛墍浠ュ晩锛岄€夊宸ュ叿鐪熺殑鑳藉皯鎺夊ソ澶氬ご鍙戯紒

本文由嘻道妙招独家原创,未经允许,严禁转载