我有
listB=[[0,1],[1,2]]
listall=[0,1,2,3]
對于 中的每個元素listB,我想通過添加一個在該元素中listall但不在該元素中的數字來將其擴展為一個長度為 3 的元素。我想要的輸出是以下串列:
listC=[[0,1,2],[0,1,3],[1,2,3]]
作為第一步,我嘗試了以下代碼:
import numpy as np
listB=[[0,1],[1,2]]
listall=range(4)
listC=[]
for b in listB:
difb=set(listall)-set(b)
for i in difb:
listC.append([b,i])
print(listC)
但是,我得到的輸出是:
[[[0,1],2],[[0,1],3],[[1,2],0],[[1,2],3]]
這與我想要的相差甚遠。由于此輸出串列中的每個元素都嵌套了一個子陣列,因此每個元素中的數字也沒有排序。我至少需要先把它變成 [[0,1,2],[0,1,3],[0,1,2],[1,2,3]] (然后去掉重復的)。實作它的最快(最有效)方法是什么?謝謝!
uj5u.com熱心網友回復:
b創建新串列時需要解壓其中的專案
listC.append([*b,i])
或者如果它更容易理解,添加一個帶有 i 的新串列到串列 b
listC.append(b [i])
uj5u.com熱心網友回復:
如果您只想listC在listC
listC.append([b,i])
和
new = set([*b, i])
if new not in listC:
listC.append(new)
那么最終的輸出就變成了:
>>> listC = [list(c) for c in listC]
[[0, 1, 2], [0, 1, 3], [1, 2, 3]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410491.html
標籤:
下一篇:更改值檢測numpyPython
