9.1 Siyahının surətinin yaradılması
Python-da siyahının surətini yaratmaq - vacib bir işdir və siyahılarla işləyərkən məlumatların gözlənilməz dəyişikliklərindən qaçmaq üçün lazımlı ola bilər. Siyahılarla işləyərkən səthi (shallow
) və dərin (deep
) surət arasındakı fərqləri başa düşmək vacibdir.
Səthi surət
Səthi surət yeni bir siyahı yaradır, amma elementlər eyni qalır (əgər elementlər referanslardırsa, onlar referans kimi kopyalanır). Bu bir neçə üsulla edilə bilər:
list()
funksiyasından istifadə edərək:
original = [1, 2, 3]
copy = list(original)
Dilimlərdən istifadə:
original = [1, 2, 3]
copy = original[:]
copy()
metodu:
Dərin surət
Dərin surət yeni bir siyahı yaradır və siyahıda yerləşən bütün daxili obyektlərin də surətlərini yaradır. Bu xüsusilə siyahılar başqa dəyişə bilən məlumat tipləri (məsələn, başqa siyahılar) saxlayanda vacibdir. Bunun üçün copy
modulu istifadə olunur:
import copy
original = [[1, 2], [3, 4]]
deep_copy = copy.deepcopy(original)
Hansı üsulu nə vaxt istifadə etmək lazımdır
Səthi surət daha sürətlidir və elementlər sadə və ya təkrar surətlənməyən (məsələn, sətirlər və ya rəqəmlər) olduğunda uyğundur. Dərin surət isə lazım olur ki, siyahının elementləri özləri dəyişə bilən kolleksiyalar olduqda ya da surətdəki dəyişikliklər orijinalda əks olunmasın.
9.2 Listdən elementin silinməsi
Eyni zamanda həm sadə, həm də mürəkkəb bir iş var: dövrün içində listdən element(lər)in silinməsi.
Listdən keçmək üçün for
dövründən istifadə etdiyimizdə, list iterator adlı xüsusi bir törəmə obyekt qaytarır, hansı ki for
dövrü bütün elementlərini keçmək üçün istifadə edir. Və əgər iterator (for dövrü ilə) istifadəsi zamanı listdən bir element silinsə, iterator düzgün işləməyə bilər.
Əgər 3-cü elementi sildinizsə, 4-cü avtomatik olaraq 3-cü olacaq. Amma for
dövrü, iterator vasitəsilə, yeni 4-cü elementə keçəcək, hansı ki əvvəlcə 5-ci idi. Deməli, 4-cü element keçiləcək.
Elementləri təhlükəsiz şəkildə silmək üçün bir neçə metod:
remove()
metodundan istifadə
Əgər hansı elementin silinməsi lazım olduğu dəqiq bilinir, dövrün içində remove()
-dan istifadə etmək olar. Amma bu metoda çox element varsa effektiv olmaya bilər, çünki hər remove()
çağırışı elementi axtarır və bu, icranı ləngidir.
Yeni bir list yaratmaq
Daha təhlükəsiz bir üsul — yalnız lazımi elementləri saxlayan yeni bir list yaratmaqdır:
original_list = [1, 2, 3, 4, 5, 6]
new_list = [x for x in original_list if x % 2 != 0] # yalnız tək ədədləri saxlayırıq
Indexlərdən istifadə
Elementləri təhlükəsiz şəkildə silmək üçün tərs indexlərlə for
dövründən istifadə etmək olar:
for i in range(len(original_list) - 1, -1, -1):
if original_list[i] % 2 == 0: # silmək üçün şərt
del original_list[i]
Listin sonundan irəliyə doğru keçdikdə, silinən elementlər yalnız artıq keçilmiş indexlərə təsir edir.
Listin surətindən istifadə:
Tutaq ki, listdən bütün mənfi ədədləri silmək istəyirsiniz:
numbers = [1, -1, 2, -2, 3, -3]
# Təhlükəsiz keçmək üçün listin surəti yaradılır
for number in numbers.copy():
if number < 0:
numbers.remove(number)
print(numbers) # [1, 2, 3] nəticəni göstərir
9.3 Siyahıların birləşdirilməsi
Tez-tez iki və ya daha çox siyahını birləşdirib bir siyahı yaratmaq lazım olur. Bunu bir neçə üsulla etmək olar, hər biri müxtəlif tapşırıqlar üçün uyğundur və özünəməxsus xüsusiyyətlərə malikdir.
+
operatorundan istifadə
İki siyahını birləşdirməyin ən sadə üsulu +
operatorundan istifadə etməkdir. Bu, sadə və intuitiv bir metoddur:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = list1 + list2
print(combined_list) # [1, 2, 3, 4, 5, 6] çap edəcək
extend()
metodu
extend()
metodu birinci siyahını modifikasiya edir, ikinci siyahının bütün elementlərini sonuna əlavə edir. Bu, ilkin siyahını dəyişir:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.extend(list2)
print(list1) # [1, 2, 3, 4, 5, 6] çap edəcək
Siyahı daxil etmələr (List Comprehensions)
Siyahı daxil etmələr müxtəlif siyahıların elementlərini birləşdirərək kompleks yeni siyahılar yaratmaq üçün istifadə edilə bilər:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = [item for sublist in [list1, list2] for item in sublist]
print(combined_list) # [1, 2, 3, 4, 5, 6] çap edəcək
append()
metodu
2-ci siyahının hər bir elementini 1-ci siyahıya bir-bir əlavə etmək olar. Bir variant kimi bunu da nəzərə ala bilərsiz.
list1 = [1, 2, 3]
list2 = [4, 5, 6]
for x in list2:
list1.append(x)
print(list1) # [1, 2, 3, 4, 5, 6] çap edəcək
Əslində, siyahılar barədə sizə danışmaq istədiklərim bu qədər idi 😊
GO TO FULL VERSION