Q:

pythonic way of replacing the content of list of list?

The code below generates unique combinations:
from itertools import permutations 

comb3 = permutations([1,1,1,0,0,0] , 3) 

def removeDuplicates(listofElements):

    # Create an empty list to store unique elements
    uniqueList = []

    # Iterate over the original list and for each element
    # add it to uniqueList, if its not already there.
    for elem in listofElements:        
        elif elem not in uniqueList:
            uniqueList.append(elem)

    # Return the list of unique elements        
    return uniqueList

comb3 = removeDuplicates(comb3)

for i in list(comb3):     
    print(i)

Intermediate Output
The result output is a list of tuples. It will be interpreted as A, B, C, 1 = EXIST, 0 = NOT EXIST.
(1, 1, 1)
(1, 1, 0)
(1, 0, 1)
(1, 0, 0)
(0, 1, 1)
(0, 1, 0)
(0, 0, 1)
(0, 0, 0)

convert to list of lists
Convert lists of tuples to a list of lists and replace its contents
res = [list(ele) for ele in comb3] 

for i in list(res):   

    if(i[0] == 1):
        i[0] = 'A Exist'

    if(i[0] == 0):
        i[0] = 'A Not Exist'

    if(i[1] == 1):
        i[1] = 'B Exist'

    if(i[1] == 0):
        i[1] = 'B Not Exist'

    if(i[2] == 1):
        i[2] = 'C Exist'

    if(i[2] == 0):
        i[2] = 'C Not Exist'

Display results
for i in list(res):   
    print(i)

Final Output
['A Exist', 'B Exist', 'C Exist']
['A Exist', 'B Exist', 'C Not Exist']
['A Exist', 'B Not Exist', 'C Exist']
['A Exist', 'B Not Exist', 'C Not Exist']
['A Not Exist', 'B Exist', 'C Exist']
['A Not Exist', 'B Exist', 'C Not Exist']
['A Not Exist', 'B Not Exist', 'C Exist']
['A Not Exist', 'B Not Exist', 'C Not Exist']

Is there a more elegant or better way of replacing the contents of a list of list?

A:

First, it's inefficient to use permutations and then filter them out. What you're looking for is a cartesian product. Using itertools.product with a repeat argument, you can get your desired intermediate output.
from itertools import product
comb3 = list(product([1,0], repeat=3))
#Output:
[(1, 1, 1),
 (1, 1, 0),
 (1, 0, 1),
 (1, 0, 0),
 (0, 1, 1),
 (0, 1, 0),
 (0, 0, 1),
 (0, 0, 0)]

From this point: You can use iteration and a mapping to cleanly get your desired output as follows.
column_names = 'ABC' #To map all names with the number of items. We can think of these as column names.
code_mapping = {0: 'Not Exist', 1: 'Exist'} #For mapping the codes to meanings.

output = []
for item in comb3:
    row = [f"{name} {code_mapping[code]}" for name, code in zip(column_names, item)]
    output.append(row)
print(output)

Output:
[['A Exist', 'B Exist', 'C Exist'],
 ['A Exist', 'B Exist', 'C Not Exist'],
 ['A Exist', 'B Not Exist', 'C Exist'],
 ['A Exist', 'B Not Exist', 'C Not Exist'],
 ['A Not Exist', 'B Exist', 'C Exist'],
 ['A Not Exist', 'B Exist', 'C Not Exist'],
 ['A Not Exist', 'B Not Exist', 'C Exist'],
 ['A Not Exist', 'B Not Exist', 'C Not Exist']]

