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

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

給定 2 個列表,從兩個列表中找到一個隨機固定大小的子集,使得每個列表中至少有一個值

給定 2 個列表,從兩個列表中找到一個隨機固定大小的子集,使得每個列表中至少有一個值

繁花如伊 2022-06-22 18:38:57
假設我有 2 個列表,列表 1 和列表 2 這樣(例如)l1 = ['w1', 'w2', 'w3', 'w4', 'w5']l2 = ['w6', 'w7', 'w8']是否有一種簡短而有效的方法來獲取一個新列表(具有給定的固定大小,例如 4),其中包含兩個列表中的單詞,這樣每個列表中至少有一個單詞?(不重復)尺寸 4 的可能結果['w6', 'w2', 'w4', 'w8']['w2', 'w8', 'w7', 'w4']['w1', 'w2', 'w6', 'w4']['w2', 'w3', 'w1', 'w7']
查看完整描述

3 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

您可以random.sample()為此使用:


import random


l1 = ['w1','w2','w3','w4','w5']

l2 = ['w6','w7','w8']


result = [random.sample(l1,2) + random.sample(l2,2) for i in range(4)]

print(result)

可能的結果:


[['w5', 'w1', 'w8', 'w7'], ['w3', 'w4', 'w7', 'w6'], ['w3', 'w5', 'w6', 'w8'], ['w5', 'w2', 'w7', 'w6']]



查看完整回答
反對 回復 2022-06-22
?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

您可以生成所有這些:


from itertools import combinations


l1 = ['w1','w2','w3','w4','w5']

l2 = ['w6','w7','w8']


results = []

for parts in ( list(p) + [other] for p in combinations(l1,3) for other in l2):

    results.append(parts)


print(results, sep="\n")

輸出:


[['w1', 'w2', 'w3', 'w6'], ['w1', 'w2', 'w3', 'w7'], ['w1', 'w2', 'w3', 'w8'],

 ['w1', 'w2', 'w4', 'w6'], ['w1', 'w2', 'w4', 'w7'], ['w1', 'w2', 'w4', 'w8'], 

 ['w1', 'w2', 'w5', 'w6'], ['w1', 'w2', 'w5', 'w7'], ['w1', 'w2', 'w5', 'w8'],

 ['w1', 'w3', 'w4', 'w6'], ['w1', 'w3', 'w4', 'w7'], ['w1', 'w3', 'w4', 'w8'],

 ['w1', 'w3', 'w5', 'w6'], ['w1', 'w3', 'w5', 'w7'], ['w1', 'w3', 'w5', 'w8'],

 ['w1', 'w4', 'w5', 'w6'], ['w1', 'w4', 'w5', 'w7'], ['w1', 'w4', 'w5', 'w8'],

 ['w2', 'w3', 'w4', 'w6'], ['w2', 'w3', 'w4', 'w7'], ['w2', 'w3', 'w4', 'w8'],

 ['w2', 'w3', 'w5', 'w6'], ['w2', 'w3', 'w5', 'w7'], ['w2', 'w3', 'w5', 'w8'],

 ['w2', 'w4', 'w5', 'w6'], ['w2', 'w4', 'w5', 'w7'], ['w2', 'w4', 'w5', 'w8'],

 ['w3', 'w4', 'w5', 'w6'], ['w3', 'w4', 'w5', 'w7'], ['w3', 'w4', 'w5', 'w8']]

- itertools.combinations ofl1生成所有 3-long 組合l1并為其添加一個元素l2。


查看完整回答
反對 回復 2022-06-22
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

您可以組合列表并使用生成器函數:


l1 = ['w1', 'w2', 'w3', 'w4', 'w5']

l2 = ['w6', 'w7', 'w8']

def combos(d, c = []):

  if len(c) == 4:

    yield c

  else:

    for i in d:

       s1, s2 = sum(i in c for i in l1), sum(i in c for i in l2)

       if not (s1 and s2) and len(c) == 3:

          if i not in c and ((not s1 and i in l1) or (not s2 and i in l2)):

             yield from combos(d, c+[i])

       elif i not in c:

           yield from combos(d, c+[i])


print(list(combos(l1+l2)))

輸出:


[['w1', 'w2', 'w3', 'w6'], 

 ['w1', 'w2', 'w3', 'w7'], 

 ['w1', 'w2', 'w3', 'w8'], 

 ['w1', 'w2', 'w4', 'w6'], 

 ['w1', 'w2', 'w4', 'w7'], 

 ['w1', 'w2', 'w4', 'w8']

 ....

 ['w6', 'w1', 'w7', 'w3'], 

 ['w6', 'w1', 'w7', 'w4'], 

 ['w6', 'w1', 'w7', 'w5'], 

 ['w6', 'w1', 'w7', 'w8'], 

 ['w6', 'w1', 'w8', 'w2']

 ....

 ]


查看完整回答
反對 回復 2022-06-22
  • 3 回答
  • 0 關注
  • 208 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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