Pergunta

Eu quero comparar os valores em uma lista para os valores em uma segunda lista e voltar todos os que estão na primeira lista, mas não no segundo i.

list1 = ['one','two','three','four','five']
list2 = ['one','two','four']

retornaria 'três' e 'cinco'.

Eu só tenho um pouco de experiência com python, então isso pode vir a ser uma forma ridícula e estúpida para tentar resolvê-lo, mas isso o que eu fiz até agora:

def unusedCategories(self):
    unused = []
    for category in self.catList:
        if category != used in self.usedList:
            unused.append(category)
    return unused

No entanto, este gera um erro 'iteração sobre não-sequência', que I se reunir para significar que uma ou ambas as 'listas' não são realmente listas (a saída crua para ambos é no mesmo formato como o meu primeiro exemplo)

Foi útil?

Solução

Use define para obter a diferença entre as listas:

>>> list1 = ['one','two','three','four','five']
>>> list2 = ['one','two','four']
>>> set(list1) - set(list2)
set(['five', 'three'])

Outras dicas

set(list1).difference(set(list2))

set.difference :

>>> list1 = ['one','two','three','four','five']
>>> list2 = ['one','two','four']
>>> set(list1).difference(list2)
{'five', 'three'}

Você pode pular conversão de list2 a set.

Você pode fazê-lo com jogos ou uma compreensão da lista:

unused = [i for i in list1 if i not in list2]

Todas as respostas aqui são corretas. Eu usaria compreensão da lista, se as listas são curtos; conjuntos será mais eficiente. Ao explorar por que seu código não funciona, eu não obter o erro. (Ele não funciona, mas isso é uma questão diferente).

>>> list1 = ['a','b','c']
>>> list2 = ['a','b','d']
>>> [c for c in list1 if not c in list2]
['c']
>>> set(list1).difference(set(list2))
set(['c'])
>>> L = list()
>>> for c in list1:
...     if c != L in list2:
...         L.append(c)
... 
>>> L
[]

O problema é que a declaração if não faz sentido. Espero que isso ajude.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top