亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Python - 如何從嵌套列表中獲取所有可能的組合

Python - 如何從嵌套列表中獲取所有可能的組合

喵喔喔 2023-09-12 16:30:38
我有一個像這樣的嵌套列表:values = [['DNO', 0.2], ['Equinor', 0.4], ['Petoro', 0.2], ['Total', 0.2]]如何獲得總和(每個子列表的第二個元素)大于 0.5 的所有可能的元素組合?這就是我正在使用的:def getCombinations(values, min_len):    combo = "\n"    numbers = []    doc = {}    for val in values:        doc[val[0]] = val[1]        numbers.append(val[1])    result = [seq for i in range(len(numbers), 0, -1) for seq in itertools.combinations(numbers, i) if sum(seq) >= 0.5]    temp = doc.copy()    for r in result:        doc = temp.copy()        if len(r) >= min_len:            for rr in r:                combo = combo + get_key(doc, rr) + " "                doc.pop(get_key(doc, rr))            combo = combo + "\n"    return combo當上面列表中有多個值(例如 0.2)時,我的算法會出現一些問題。目前它返回的是min_length=3:Total Equinor Petoro DNOTotal Equinor Petoro Total Equinor Petoro Total Petoro DNO Equinor Total Petoro 
查看完整描述

2 回答

?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

您可以使用這樣的列表理解:

解釋:

  • 第一個for定義了組合的長度。values使用從 2 到 的長度的每個長度。

  • 第二個for創建實際組合

  • 使用if生成器方法對項目數進行求和

from itertools import combinations


combis = [

    item

    for length in range(2, len(values)+1)

    for item in combinations(values, length)

    if sum(i[1] for i in item) >= 0.5

]



查看完整回答
反對 回復 2023-09-12
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

以下應該有效:


import itertools  

result=[] 

for k in range(2,len(values)+1):

    temp=[tuple(x[0] for x in i) for i in list(itertools.combinations(values,k))if sum([p[1] for p in i]) >0.5]

    result.append(temp)

result=sum(result, [])

print(result)

輸出:


[('DNO', 'Equinor'), ('Equinor', 'Petoro'), ('Equinor', 'Total'), ('DNO', 'Equinor', 'Petoro'), ('DNO', 'Equinor', 'Total'), ('DNO', 'Petoro', 'Total'), ('Equinor', 'Petoro', 'Total'), ('DNO', 'Equinor', 'Petoro', 'Total')]



查看完整回答
反對 回復 2023-09-12
  • 2 回答
  • 0 關注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號