Imagine que você tem uma lista de IDs de usuário:
user_ids = [1, 2, 3]
e você precisa verificar se esses usuários são amigos e, se não, torná-los amigos.
Existem 9 combinações diferentes para verificar:
combinations = [
(1, 1)
(1, 2)
(1, 3)
(2, 1)
(2, 2)
(2, 3)
(3, 1)
(3, 2)
(3, 3)
]
Podemos excluir a maioria das combinações porque o usuário não pode ser amigo de si mesmo e podemos supor que se o usuário A é amigo do usuário B, então também o usuário B é amigo do usuário A. Portanto, ficamos com estas combinações para verificar:
combinations = [
(1, 2)
(1, 3)
(2, 3)
]
A solução mais simples que vem à mente é escrever for
loops aninhados :
for a in user_ids:
for b in user_ids:
if a == b:
# user cannot be friends with oneself
continue
if a > b:
# exclude duplicate/reverse combinations
continue
if not friends(a, b):
create_friendship(a, b)
Vamos tentar simplificar esse código usando a biblioteca python itertools:
import itertools
for a, b in itertools.combinations(user_ids, 2):
if not friends(a, b):
create_friendship(a, b)
o /