181 votes

Combinaison de deux listes et suppression des doublons, sans suppression des doublons dans la liste d'origine

J'ai deux listes que je dois combiner et dans la deuxième liste, les doublons de la première liste sont ignorés. C'est un peu difficile à expliquer, alors laissez-moi vous montrer un exemple de ce à quoi ressemble le code, et ce que je veux comme résultat.

first_list = [1, 2, 2, 5]

second_list = [2, 5, 7, 9]

# The result of combining the two lists should result in this list:
resulting_list = [1, 2, 2, 5, 7, 9]

Vous remarquerez que le résultat contient la première liste, y compris ses deux valeurs "2", mais le fait que la deuxième liste ait également une valeur supplémentaire de 2 et 5 n'est pas ajouté à la première liste.

Normalement, pour quelque chose comme ça, j'utiliserais des sets, mais un set sur first_list purgerait les valeurs dupliquées qu'il a déjà. Je me demande donc quel est le moyen le plus rapide et le plus efficace pour obtenir la combinaison souhaitée.

Merci.

237voto

RichieHindle Points 98544

Vous devez ajouter à la première liste les éléments de la deuxième liste qui ne figurent pas dans la première - les ensembles sont le moyen le plus simple de déterminer de quels éléments il s'agit, comme ceci :

first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

in_first = set(first_list)
in_second = set(second_list)

in_second_but_not_in_first = in_second - in_first

result = first_list + list(in_second_but_not_in_first)
print(result)  # Prints [1, 2, 2, 5, 9, 7]

Ou si vous préférez les one-liners 8-)

print(first_list + list(set(second_list) - set(first_list)))

131voto

Ned Batchelder Points 128913
resulting_list = list(first_list)
resulting_list.extend(x for x in second_list if x not in resulting_list)

78voto

Vous pouvez utiliser des ensembles :

first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

resultList= list(set(first_list) | set(second_list))

print(resultList)
# Results in : resultList = [1,2,5,7,9]

30voto

first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

print( set( first_list + second_list ) )

16voto

mosegui Points 188

Vous pouvez réduire cela à une seule ligne de code si vous utilisez numpy :

a = [1,2,3,4,5,6,7]
b = [2,4,7,8,9,10,11,12]

sorted(np.unique(a+b))

>>> [1,2,3,4,5,6,7,8,9,10,11,12]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X