Here’s a way equivalent to @nano’s reply:
nao_comuns = list(set(a) ^ set(b))
But in a didactic way and programming the functionality you can do without using two cycles (I commented in the code some explanations):
def nao_comuns(a,b):
a_b = a+b # juntar as duas para percorrer todos os elementos
nao_comuns = []
for ele in a_b:
if ele not in a or ele not in b: # nao existe numa delas
nao_comuns.append(ele)
return nao_comuns
a = range(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b = range(0,20,2) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
print nao_comuns(a,b) # [1, 3, 5, 7, 9, 10, 12, 14, 16, 18]
DEMONSTRATION
With list compreension you can make this cycle in a row:
def nao_comuns(a,b):
a_b = a+b # juntar as duas para percorrer todos os elementos
return [ele for ele in a_b if ele not in a or ele not in b]
a = range(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b = range(0,20,2) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
print nao_comuns(a,b) # [1, 3, 5, 7, 9, 10, 12, 14, 16, 18]
DEMONSTRATION
Using a Generator:
def nao_comuns(a,b):
a_b = a+b # juntar as duas para percorrer todos os elementos
for ele in a_b:
if ele not in a or ele not in b: # nao existe numa delas
yield ele
a = range(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b = range(0,20,2) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
print list(nao_comuns(a,b)) # [1, 3, 5, 7, 9, 10, 12, 14, 16, 18]
DEMONSTRATION
For reasons of readability of the code, it is recommended to use
x not in y
instead ofnot x in y
, even if both expressions are evaluated in the same way:not y.__contains__(x)
.– Woss
on a separate note: some good reason for you to be studying Python 2? The latest version is 2010, and it will no longer have updates - the best is to proceed with Python 3.6
– jsbueno