Mam dwie listy, które muszę połączyć, gdzie druga lista ma zignorowane duplikaty pierwszej listy. .. Trochę trudne do wyjaśnienia, więc pozwól mi pokazać przykład tego, jak wygląda kod i czego oczekuję od wyniku.
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]
Zauważysz, że wynik ma pierwszą listę, w tym dwie wartości „2”, ale fakt, że second_list ma również dodatkową wartość 2 i 5, nie jest dodawany do pierwszej listy.
Normalnie do czegoś takiego użyłbym zestawów, ale zestaw na first_list wyczyściłby zduplikowane wartości, które już ma. Zastanawiam się więc po prostu, jaki najlepszy / najszybszy sposób na osiągnięcie tej pożądanej kombinacji.
Dzięki.
second_list
?Odpowiedzi:
Musisz dołączyć do pierwszej listy te elementy drugiej listy, których nie ma na pierwszej - zbiory są najłatwiejszym sposobem określenia, które to elementy, na przykład:
Lub jeśli wolisz jednoliniowe 8-)
źródło
2
Twoim wyniku jest tylko jeden , a powinny być dwa.źródło
set
. 👍Możesz użyć zestawów:
źródło
Możesz sprowadzić to do jednej linii kodu, jeśli używasz numpy:
źródło
źródło
źródło
Najprostszy dla mnie jest:
źródło
TypeError: unhashable type: 'dict'
)Możesz także połączyć odpowiedzi RichieHindle i Neda Batcheldera, aby uzyskać algorytm O (m + n) o średniej wielkości liter, który zachowuje porządek:
Zauważ, że
x in s
ma złożoność w najgorszym przypadku O (m) , więc złożoność w najgorszym przypadku tego kodu wciąż wynosi O (m * n) .źródło
To może pomóc
Funkcja sumująca scala drugą listę w pierwszą, bez duplikowania elementu a, jeśli jest już w a. Podobny do operatora set union. Ta funkcja nie zmienia b. Jeśli a = [1,2,3] b = [2,3,4]. Po połączeniu (a, b) tworzy a = [1,2,3,4] i b = [2,3,4]
źródło
Na podstawie przepisu :
źródło
[1, 2, 2, 5, 7, 9]
źródło