Siyahıda (massivdə) Python-da dublikat elementlərin olub-olmadığını müəyyən etmək

Biznes

Aşağıda siyahıda (massivdə) aşağıdakı halların hər biri üçün Python-da dublikat elementlərin (bütün elementlər unikal/unikaldır) olub-olmadığını müəyyən etmək üsulunun təsviri verilmişdir.

  • Elementdə heç bir siyahı olmayan siyahı üçün
  • Elementlərin siyahısı olan siyahılar üçün (iki ölçülü massivlər, siyahıların siyahıları və s.)

Siyahıdan dublikat elementləri necə çıxarmaq və ya çıxarmaq barədə aşağıdakı məqaləyə baxın.

Qeyd edək ki, siyahılar müxtəlif növ verilənləri saxlaya bilər və massivlərdən ciddi şəkildə fərqlənir. Yaddaş ölçüsü və yaddaş ünvanları və ya böyük verilənlərin ədədi emalı tələb olunan proseslərdə massivləri idarə etmək istəyirsinizsə, massivdən (standart kitabxana) və ya NumPy istifadə edin.

Siyahıda təkrar elementlərin olub olmadığını müəyyənləşdirin (elementin siyahısı yoxdursa)

Elementin siyahı kimi yenilənə bilən obyekti yoxdursa, dəst dəsti növünün konstruktor setindən() istifadə edin.

Dəst növü dublikat elementləri olmayan məlumat növüdür. Siyahı konstruktor setinə () ötürüldükdə dublikat dəyərlər nəzərə alınmır və elementlər kimi yalnız unikal dəyərləri olan dəst tipli obyekt qaytarılır.

Bu dəst tipli obyektin elementlərinin sayı və ilkin siyahı daxili len() funksiyasından istifadə etməklə əldə edilir və müqayisə edilir.

  • Elementlərin sayı bərabərdirsə, orijinal siyahıda heç bir təkrar element yoxdur
  • Elementlərin sayı fərqli olarsa, dublikat elementlər orijinal siyahıya daxil edilir

Dublikat elementlər olmadıqda false, dublikat elementlər olduqda isə doğru qaytaran funksiyalar aşağıdakılardır.

def has_duplicates(seq):
    return len(seq) != len(set(seq))

l = [0, 1, 2]
print(has_duplicates(l))
# False

l = [0, 1, 1, 2]
print(has_duplicates(l))
# True

Nümunə siyahıdır, lakin eyni funksiyadan tuplelərlə istifadə etmək olar.

Siyahılar kimi dəyişkən (yenilənə bilən) obyektlər çoxluq tipli elementlər ola bilməz. Buna görə də, elementlər kimi siyahıları olan siyahılar (iki ölçülü massivlər, siyahıların siyahıları və s.) TypeError ilə nəticələnəcək. Qarşı tədbir aşağıda göstərilmişdir.

l_2d = [[0, 1], [1, 1], [0, 1], [1, 0]]
# print(has_duplicates(l_2d))
# TypeError: unhashable type: 'list'

Siyahıda təkrar elementlərin olub olmadığını müəyyənləşdirin (elementin siyahısı varsa)

Elementlərin siyahısı olan siyahı (məsələn, siyahıların siyahısı) olduğu halda, təkrar elementlərin olub olmadığını müəyyən etmək üçün aşağıdakı funksiyalardan istifadə edilə bilər.

def has_duplicates2(seq):
    seen = []
    unique_list = [x for x in seq if x not in seen and not seen.append(x)]
    return len(seq) != len(unique_list)

l_2d = [[0, 0], [0, 1], [1, 1], [1, 0]]
print(has_duplicates2(l_2d))
# False

l_2d = [[0, 0], [0, 1], [1, 1], [1, 1]]
print(has_duplicates2(l_2d))
# True

set() əvəzinə siyahı başa düşmə notasiyası elementləri yalnız unikal dəyərlər olan siyahı yaradır və elementlərin sayı müqayisə edilir. Təfərrüatlar üçün aşağıdakı məqaləyə baxın.

Bu funksiya elementlərin siyahısı olmayan siyahılar üçün də etibarlıdır.

l = [0, 1, 2]
print(has_duplicates2(l))
# False

l = [0, 1, 1, 2]
print(has_duplicates2(l))
# True

İndiyə qədər misal elementlər siyahısının təkrarlandığını (eyni siyahı ehtiva edir) müəyyən etməkdir.

Hər bir siyahının elementlərinin üst-üstə düşüb-düşməməsi, ilkin siyahını bir ölçüyə hamarlaşdırdıqdan sonra müəyyən edilə bilər.

l_2d = [[0, 1], [2, 3]]
print(sum(l_2d, []))
# [0, 1, 2, 3]

print(has_duplicates(sum(l_2d, [])))
# False

l_2d = [[0, 1], [2, 0]]
print(has_duplicates(sum(l_2d, [])))
# True

Burada siyahını düzləşdirmək üçün sum() istifadə olunur, lakin itertools.chain.from_iterable() də istifadə edilə bilər. Bundan əlavə, üç və ya daha çox ölçüdən ibarət siyahını düzləşdirərkən yeni funksiyanı təyin etmək lazımdır.

Copied title and URL