I have
listB=[[0,1],[1,2]] listall=[0,1,2,3]
For each element in listB
, I want to extend it to a length-3 element by adding a number that is in listall
but not in this element. My desired output is the following list:
listC=[[0,1,2],[0,1,3],[1,2,3]]
As a first step, I tried the following code:
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)
However, the output I got is:
[[[0,1],2],[[0,1],3],[[1,2],0],[[1,2],3]]
This is far from what I wanted. As each element in this output list has a subarray nested in it, also the numbers in each element are not ordered. I need to at least turn it to [[0,1,2],[0,1,3],[0,1,2],[1,2,3]] first (and then get rid of the duplicates). What’s the fastest (most efficient) way to achieve it? Thanks!
Advertisement
Answer
You need to unpack the items in b
when creating the new list
listC.append([*b,i])
or if its easier to understand, add a new list with i to list b
listC.append(b + [i])