Introdução
Em Python, a diferença simétrica (symmetric difference) entre duas listas é uma nova lista contendo todos os elementos que estão em qualquer uma das listas originais, mas não em ambas. Neste desafio, vamos escrever uma função que retorna a diferença simétrica entre duas listas, após aplicar a função fornecida a cada elemento de ambas as listas.
Diferença Simétrica Baseada em Função
Escreva uma função symmetric_difference_by(a, b, fn) que recebe duas listas a e b, e uma função fn. A função deve retornar uma nova lista contendo todos os elementos que estão em qualquer uma das listas originais, mas não em ambas, após aplicar a função fornecida a cada elemento de ambas as listas.
Para resolver este problema, você pode seguir estes passos:
- Crie um
setaplicandofna cada elemento em cada lista. - Use uma list comprehension em combinação com
fnem cada uma delas para manter apenas os valores que não estão contidos no conjunto (set) criado anteriormente da outra. - Concatene as duas listas obtidas no passo 2.
A função deve ter os seguintes parâmetros:
a: uma lista de elementosb: uma lista de elementosfn: uma função que recebe um elemento e retorna um novo valor
A função deve retornar uma nova lista contendo todos os elementos que estão em qualquer uma das listas originais, mas não em ambas, após aplicar a função fornecida a cada elemento de ambas as listas.
def symmetric_difference_by(a, b, fn):
(_a, _b) = (set(map(fn, a)), set(map(fn, b)))
return [item for item in a if fn(item) not in _b] + [item
for item in b if fn(item) not in _a]
from math import floor
symmetric_difference_by([2.1, 1.2], [2.3, 3.4], floor) ## [1.2, 3.4]
Resumo
Neste desafio, aprendemos como escrever uma função que retorna a diferença simétrica (symmetric difference) entre duas listas, após aplicar a função fornecida a cada elemento de ambas as listas. Usamos um conjunto (set) e list comprehension para alcançar isso.