1. Python: List və metodları

Narmin Aliyeva
Pragmatech
Published in
5 min readAug 20, 2020

Bu və bundan sonrakı bir neçə məqaləmdə Python-da qabağımıza çıxacaq və bizim də bilməli olduğumuz önəmli mövzulardan biri Sequence Data Types: lists, tuples, sets, dictionaries haqqında danışacam. Indi isə başlayaq listlərlə.

Listlərin digərlərində fərqi :

  • Mutable (dəyişdirilə bilən)’dır.
  • Sıralanır.
  • Elementlər Square brackets (kvadrat mötərizələr) “[]” içərisində yazılır.

List-ləri necə yaradacayıq?

Python-da, list elementləri kvadrat mötərizələr(square brackets) içərisində yazılır və vergüllər ilə ayrılır. Listlərin içərisinə istənilən qədər və istənilən məlumat növündə(integer, float, string və s.) element yerləşdirmək mümkündür:

# boş list
list1 = []

# tam ədədlərdən ibarət list
list1 = [1, 2, 3]

# müxtəlif məlumat növlərindən (data types) ibarət list
list1 = [1, "Salam", 3.4]

Həmçinin biz list-lərin içərisinə də list (nested list) yerləşdirə bilərik:

# iç-içə list (nested list)
nested_list = [["medium"], [8, 4, 6], ['a', 'b', 'c']]

List-də indeksləşdirmə nədir?

Biz listdəki elementlərə çatmaq üçün indeks operatorundan [] istifadə edəcəyik. Pythonda, elementin indeksi 0-dan başlayır. Və indeks mütləq ki tam ədəd olmalıdır:

list1 = ['m', 'e', 'd', 'i', 'u', 'm']
# 0 1 2 3 4 5 indeksləşmə
# Output: m
print(list1[0])

# Output: i
print(list1[3])

# İç-içə(nested) List
nested_list = ["medium", [2, 0, 2, 0]

# Output: e
print(nested_list[0][1])
# Output: 0
print(nested_list[1][3])

# Error! İndeksləmə üçün tam ədədlərdən istifadə olunmalıdır.
print(list1[4.0])

Mənfi indeksləşdirmə nədir?

Python, ardıcıllıqlar(sequences) üçün mənfi indeksləşdirməyə icazə verir.

Ən son elementi [-1] ilə indeksləşdirməyə başlayırıq və beləcə [-2], [-3] … davam edir:

list1 = ['m', 'e', 'd', 'i', 'u', 'm']
# -6 -5 -4 -3 -2 -1 indeksləşmə
# Output: m
print(list1[-1])
# Output: e
print(list1[-5])

Bunlardan əlavə biz :(colon ) — qoşa nöqtə operatorundan istifadə edərək listdən bir neçə elementi əldə edə bilərik, buna list slicing də deyilir:

list1 = ['m', 'e', 'd', 'i', 'u', 'm']
# 0 1 2 3 4 5 6
# -6 -5 -4 -3 -2 -1
# yuxarıda qeyd etdiyim şəkildə ideksləmə sizə list slicing etməyə kömək edəcək (bu şəkildə indeksləmə yalnız list slicing etdiyimiz zaman doğru nəticə verir)# Output: ['d', 'i', 'u']
print(my_list[2:5])
# Output: ['m', 'e', 'd']
print(my_list[:-3])
# Output: ['i', 'u', 'm']
print(my_list[3:])
# Output: ['m', 'e', 'd', 'i', 'u', 'm']
print(my_list[:])

List-ə necə elementləri əlavə edə və ya dəyişə bilərik?

Tuple-lardan fərqli olaraq listin elementlərini dəyişdirmək mümkündür və bunun üçün təyinat (assignment) operatorundan (=) istifadə edilir.

numbers = [2, 4, 6, 8]

numbers[0] = 1
print(numbers) # Output- [1, 4, 6, 8]

numbers[1:4] = [3, 5, 7]
print(numbers) # Output- [1, 3, 5, 7]

Həmçinin, + operatorundan istifadə edərək iki listi birləşdirə bilərik. Bu operator bağlama (concatenation) adlanır.

numbers = [1, 3, 5]

print(numbers + [9, 7, 5]) #Output: [1, 3, 5, 9, 7, 5]

Digər tərəfdən * operatorundan da istifaden edərək list elementini verilmiş ədəd dəfə təkrar yazdıra bilərik:

print(["Hi!"] * 3)                  #Output: ['Hi!', 'Hi!', 'Hi!']

İndi isə listlər üzərində icra edilə biləcək metodlardan danışaq.

List Metodları:

I. list.append(x) — listin sonuna yeni bir element elavə etmək istənildikdə:

ededler = [1, 2, 3, 4]ededler.append(5)
print(ededler) #Output: [1, 2, 3, 4, 5]

II. list.insert(i, x) — müəyyən edilmiş indeksə görə element əlavə etmək istənildikdə: (i-təyin olunan indeks, x-verilmiş element)

ededler = [1, 2, 3, 4]ededler.insert(2, 5)
print(ededler) #Output: [1, 2, 5, 3, 4]

III. list.remove(x) — verilmiş olan elementi listdən silmək istənildikdə:

ededler = [1, 2, 3, 4]ededler.remove(3)
print(ededler) #Output: [1, 2, 4]

Əgər verilmiş element listdə bir-neçə dənədirsə, yəni:

ededler = [1, 2, 3, 4, 3]

bu zaman elementin ilkini silir.

ededler = [1, 2, 3, 4, 3]ededler.remove(3)
print(ededler) #Output: [1, 2, 4, 3]

IV. list.pop(i) — verilmiş indeksdəki elementi həm qaytarır (return edir), həm də listdən çıxarır:

ededler = [1, 2, 3, 4, 5]pop_deyer = ededler.pop(3)print(pop_deyer)          #Output: 4print(ededler)           #Output: [1, 2, 3, 5]

V. list.index (x) — listdə verilmiş elementin indeksini göstərir:

list1 = ['m' ,'e' ,'d' ,'i', 'u', 'm']# 'e'-nin verilmiş listdəki indeksi
indeks = list1.index('e')
print(indeks) # Output: 1
list2 = ['e' , 'l', 'e' ,'m', 'e', 'n', 't']# 'e'-nin 3-cü indeksədən sonra hansı indeksdə olduğunu göstərir
index = list2.index('e',3)
print(index) # Output: 4
# 'e'-nin 3-cü ilə 5-ci indeks arasında hansı indeksdə olduğunu göstərir
index = list2.index('e',3 , 5)
print(index) # Output: 4

VI. list.count(x) — listdə verilmiş elementin neçə dənə olduğunu göstərir:

word = ['e' , 'l', 'e' ,'m', 'e', 'n', 't']say = word.count('e')
print(say) # Output: 3

VII. list.sort()— listdə verilmiş elementləri artan və ya azalan sıra ilə sıralayır:

reqemler = [4,2,3,1,5]reqemler.sort()
print(reqemler) #Output: [1,2,3,4,5]

Sort()-un əsasında iki parametri var: reverse, key.

list.sort(key=…, reverse=…)

Əgər reverse = true olarsa, o zaman verilmiş list azalan sıra ilə düzülür:

reqemler = [4,2,3,1,5]reqemler.sort(reverse=True)
print(reqemler) #Output: [5,4,3,2,1]

Əgər listi öz təyin etdiyimiz qaydaya əsasən sıralamaq istəsək, bu zaman sort() methodunun key parametrindən istifadə edirik. Yəni necə? Misal üzərində baxaq:

def myFunc(e):
return len(e)
adlar = ['Nərmin', 'Sevda', 'Gülüstan', 'Lalə']
adlar.sort( key=myFunc)
print(adlar)
# Output: ['Lalə', 'Sevda', 'Nərmin', 'Gülüstan']

Yuxarıdakı misalda mənim “adlar” adı altında bir listim var və mən istəyirəm ki mənim təyin etdiyim funksiya (hansı ki key parametrinə bərabərləşdirmişəm), listin içərisindəki elementlərin uzunluğuna əsasən list elementlərini sıralasın.

VIII. list.extend() — verilmiş listin sonuna əlavə olunması istənilən list,tuple,set və s.-in elementlərinin əlavə edir:

adlar1 = ['Sevda', 'Orxan']
adlar2 = ['Cəlal', 'Aysel']
adlar1.extend(adlar2)
print(adlar1) # Output: ['Sevda', 'Orxan','Cəlal', 'Aysel']
adlar = ['Cəlal']# tuple-in elementlerinin əlave edilməsi
adlar_tuple = ('Sevda', 'Orxan')
adlar.extend(adlar_tuple)
print(adlar) #Output:['Cəlal','Sevda', 'Orxan']
# set-in elementlerinin elave edilmesi
adlar_set = {'Günel', 'Vahid'}
adlar.extend(adlar_set)
print(adlar) #Output:['Cəlal','Sevda', 'Orxan','Günel', 'Vahid']

extend() və append() fərqi:

a1 = [1, 2]
a2 = [1, 2]
b = (3, 4)

# a1 = [1, 2, 3, 4]
a1.extend(b)
print(a1)

# a2 = [1, 2, (3, 4)]
a2.append(b)
print(a2)

Buradan görürük ki, listə tuple elementlərini extend() etdiyimiz zaman tuple-ın hər bir elementi listin sonuna əlavə edilir. Lakin append() olunduqda artıq list elavə etdiyi setin elementlerini bir element olaraq qəbul edir.

IX. list.clear() — verilmiş listin bütün elementləri silir:

list1 = [{1, 2}, ('a'), ['1.1', '2.2']]

list1.clear()
print(list1) #Output: list1: []

Əgər Pythonun 2 yaxud 3.2 versiyasından aşağı bir versiyanı istifadə edirsinizsə o zaman clear() yerinə del operatorundan da istifadə etmək olar.

X. list.reverse()— verilmiş listin elementlərini tərsinə çevirir:

sistemler = ['Windows', 'macOS', 'Linux']
print(sistemler)
#Output:['Windows', 'macOS', 'Linux']
sistemler.reverse()
print(sistemler)
#Output:['Linux', 'macOS', 'Windows']

XI. list.copy()

Listlər kopyalanmanı iki cür yerinə yetirir: Shallow Copy və Deep Copy

Shallow Copy zamanı = operatorundan istifadə edirik və bu zaman nə baş verdiyinə baxaq:

list1=[1,2,3,4]
list2=list1
print(list1) # Output: [1,2,3,4]
print(list2) # Output: [1,2,3,4]
list2.append(5)
print(list1) # Output: [1,2,3,4,5]
print(list2) # Output: [1,2,3,4,5]

Gördüyümüz kimi append()-dən istifadə edərək list2-yə əlavə etdiyimiz element birbaşa list1-ə də əlavə olunur çünki, list2-ni list1-ə bərabərləşdirdikdən sonra artıq list1 və list2 yaddaşda eyni yeri göstərirlər, list2-də baş verən bütün dəyişikliklər list1 üçün də keçərli olur.

Bəs biz list2-də etdiyimiz dəyişikliklərin list1-də baş verməməsini istəyiriksə nə etməliyik?

Bu halda biz list.copy() metodundan istifadə edəciyik,yəni:

list1=[1,2,3,4]
list2=list1.copy()
print(list1) # Output: [1,2,3,4]
print(list2) # Output: [1,2,3,4]
list2.append(5)
print(list1) # Output: [1,2,3,4]
print(list2) # Output: [1,2,3,4,5]

Yuxarıdakı gördüyümüz misalı bu şəkildə izah edərik ,copy() methodundan istifadə etdikdə list1-in yaddaşda bir kopyası yaranır (hansı ki bu list2-dir) və bunlar yaddaşın ayrı-ayrı hissələrində yaranmış eyni elementi təşkil edən listlər olur ki, biz bunların birinin üzərində dəyişiklik etdiyimiz zaman bu digərinə şamil olunmur.

Mənbələr:

https://docs.python.org/3/tutorial/datastructures.html#more-on-lists

youtube.com/watch?v=G6LCgUlgE8I&list=PLh9ECzBB8tJOoFYmIIiwFjgXDCD9uiD_i&index=2

https://www.programiz.com/python-programming/list

--

--