Wpis z mikrobloga

jak najefektywniej sprawdzic czy dwie listy mają te same elementy?
a = [1, 2, 3, 3, 4]
b = [4, 3, 2, 3, 1]
same(a, b) -> True

myślałem, żeby posortować listy i potem sprawdzic a == b
drugim pomyslem bylo collections.Counter i porownac Counter(a) == Counter(b)
sprowadzenie list do set() nie dziala bo elementy sie moga powtarzac w liscie

jakieś pomysły?
#python #naukaprogramowania
  • 10
  • Odpowiedz
@zarev: Co znaczy "dla tego problemu"? Ogólnie dla list? Pytanie jest o dwie listy (bez wskazania ich długości i kolejności). set() jest oparty o hash (tak jak Counter, bo counter o słownik).

Albo po prostu daj kawałek kodu do pomiaru i porównania.
  • Odpowiedz
Tu jest problem w pytaniu:

"czy mają te same elementy".

vs

"sprowadzenie list do set() nie dziala bo elementy sie moga powtarzac w liscie"


Jeśli zatem "czy mają jednakową liczbę wystąpień danych elementów", to wtedy słownik, counter, sorted, wszystko jedno. I optymalizacja mogłaby polegać na wczesnym wyjściu posortowanych. W pytaniu brakuje chyba kontrprzykładu.
  • Odpowiedz