Python: Determine se uma lista não classificada está contida em uma 'lista de listas', independentemente da ordem para os elementos
Eu tenho uma pergunta semelhante a esta pergunta:Determine se 2 listas possuem os mesmos elementos, independentemente da ordem?
Qual é a melhor / mais rápida maneira de determinar se uma lista não classificadalist1
está contido em uma 'lista de listas'myListOfLists
, independentemente da ordem para os elementos emlist1
? Minha tentativa está embrulhada na funçãodoSomething(...)
que eu chamo muitas vezes:
def doSomething(myListOfLists, otherInputs):
list1 = []
... # do something here with `otherInputs'
... # which gives `list1' some values
# now only append `list1' to `myListOfLists' if it doesn't already exist
# and if it does exist, remove it
removeFromList = False
for myList in myListOfLists:
if sorted(list1) == sorted(myList):
removeFromList = True
break
if removeFromList:
myListOfLists.remove(list1)
else:
myListOfLists.append(list1)
return myListOfLists
O problema com isso é que eu preciso executar a funçãodoSomething(...)
aproximadamente 1,0e5 vezes. ComomyListOfLists
fica maior a cada chamada dedoSomething(...)
isso se torna muito demorado.
EDITAR:
Algum esclarecimento da tarefa. Deixe-me dar um exemplo da saída desejada aqui:
a = []
doSomething(a, [1,2,3])
>> a = [1,2,3]
Porque[1,2,3]
não está ema
, é anexado aa
.
doSomething(a, [3,4,5])
>> a = [[1,2,3], [3,4,5]]
Porque[3,4,5]
não está ema
, é anexado aa
.
doSomething(a, [1,2,3])
>>[3,4,5]
Porque[1,2,3]
é ema
, é removido dea
.
EDITAR:
Todas as listas têm o mesmo tamanho.