Python siyahılarının (massivlərin) xüsusi elementlərini çıxarın, dəyişdirin və çevirin

Biznes

Mövcud siyahının (massiv) yalnız müəyyən şərtlərə cavab verən elementlərini çıxarmaqla və ya silməklə və ya dəyişdirmə və ya çevirmə həyata keçirməklə Python-da yeni siyahı yaratmaq üçün siyahı anlamalarından istifadə edin.

Aşağıdakılar nümunə kodla birlikdə burada izah olunur.

  • Siyahının başa düşülməsi qeydinin əsas forması
  • Prosesi siyahının bütün elementlərinə tətbiq edin
  • Siyahıdan meyarlara cavab verən elementləri çıxarın və silin
  • Siyahının şərtlərinə cavab verən elementləri dəyişdirin və ya çevirin

Sətirlərin siyahılarının xüsusi nümunələri üçün aşağıdakı məqaləyə baxın.

Meyarlara cavab verməyən elementləri təsadüfi olaraq çıxarmaq da mümkündür.

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.

Aşağıdakı siyahı bir nümunədir

l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

Siyahının başa düşülməsi qeydinin əsas forması

Siyahıdan yeni siyahı yaradarkən, siyahı başa düşülmələri yazmaq for döngələrindən daha asandır.

[expression for any variable name in iterable object if conditional expression]

İfadə təkrarlana bilən obyektin (siyahı və ya dəst kimi) şərti ifadəsini təmin edən elementə tətbiq edilir və yeni siyahının elementinə çevrilir. “Əgər şərt ifadəsi” buraxıla bilər, bu halda ifadə bütün elementlərə tətbiq edilir.

Daha ətraflı məlumat üçün aşağıdakı məqaləyə baxın, o cümlədən iç içə siyahı anlama notasiyası.

Prosesi siyahının bütün elementlərinə tətbiq edin

Məsələn, siyahının bütün elementlərinə bəzi emal tətbiq etmək istəyirsinizsə, yuxarıdakı siyahı başa düşmə ifadəsində istədiyiniz emalı təsvir edin.

l_square = [i**2 for i in l]
print(l_square)
# [25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25]

l_str = [str(i) for i in l]
print(l_str)
# ['-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5']

Bu, nömrələrin siyahıları və sətirlərin siyahıları arasında çevirmək üçün istifadə edilə bilər.

Siyahıdan meyarlara cavab verən elementləri çıxarın və silin

Element yalnız şərti ifadə ilə seçilməlidirsə, o, ifadə ilə işlənmir, ona görə də aşağıdakı formanı alır

[variable name for variable name in original list if conditional expression]

Yeni siyahı yaradılır, ondan yalnız şərti təmin edən elementlər (şərti ifadənin doğru olduğu elementlər) çıxarılır.

l_even = [i for i in l if i % 2 == 0]
print(l_even)
# [-4, -2, 0, 2, 4]

l_minus = [i for i in l if i < 0]
print(l_minus)
# [-5, -4, -3, -2, -1]

Əgər “şərt ifadəsi” “şərti ifadə deyilsə” olaraq təyin olunarsa, o, inkara çevrilir və yalnız şərti təmin etməyən elementlər (şərti ifadənin yanlış olduğu elementlər) seçilib çıxarıla bilər. Başqa sözlə, şərti ödəyən elementlərin çıxarıldığı yeni siyahı yaradılır.

l_odd = [i for i in l if not i % 2 == 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]

l_plus = [i for i in l if not i < 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]

Təbii ki, not istifadə etmədən ekvivalent şərt ifadəsi göstərilməklə eyni nəticə alınır.

l_odd = [i for i in l if i % 2 != 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]

l_plus = [i for i in l if i >= 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]

Şərti ifadə hissəsi bir neçə şərt ola bilər. Mənfi qeydlərdən də istifadə edilə bilər.

l_minus_or_even = [i for i in l if (i < 0) or (i % 2 == 0)]
print(l_minus_or_even)
# [-5, -4, -3, -2, -1, 0, 2, 4]

l_minus_and_odd = [i for i in l if (i < 0) and not (i % 2 == 0)]
print(l_minus_and_odd)
# [-5, -3, -1]

Siyahının şərtlərinə cavab verən elementləri dəyişdirin və ya çevirin

Yuxarıdakı elementlərin çıxarılması nümunəsində şərtlərə cavab verməyən elementlər çıxarıldı.

Yalnız şərtləri ödəyən elementlər üzərində əvəzetmə, çevirmə və s. yerinə yetirmək istəyirsinizsə, siyahının başa düşülməsi qeydinin ifadə hissəsinə üçlü operatoru tətbiq edin.

Python-da üçlü operatoru aşağıdakı kimi yazmaq olar

True Value if Conditional Expression else False Value
a = 80
x = 100 if a > 50 else 0
print(x)
# 100

b = 30
y = 100 if b > 50 else 0
print(y)
# 0

Bu bir az mürəkkəbdir, lakin siyahı başa düşmə notasiyası və üçlü operatorların birləşməsi aşağıdakı kimidir.

[True Value if Conditional Expression else False Value for any variable name in original list]

Mötərizədə verilmiş hissə üçlü operatordur (faktik kodda mötərizə lazım deyil).

[(True Value if Conditional Expression else False Value) for any variable name in original list]

Hər hansı dəyişən adı doğru və ya yanlış qiymətlər üçün olduğu kimi yazılırsa, orijinal elementin dəyəri olduğu kimi istifadə olunur. Əgər ifadə yazılıbsa, həmin ifadənin işlənməsi tətbiq edilir.

l_replace = [100 if i > 0 else i for i in l]
print(l_replace)
# [-5, -4, -3, -2, -1, 0, 100, 100, 100, 100, 100]

l_replace2 = [100 if i > 0 else 0 for i in l]
print(l_replace2)
# [0, 0, 0, 0, 0, 0, 100, 100, 100, 100, 100]

l_convert = [i * 10 if i % 2 == 0 else i for i in l]
print(l_convert)
# [-5, -40, -3, -20, -1, 0, 1, 20, 3, 40, 5]

l_convert2 = [i * 10 if i % 2 == 0 else i / 10 for i in l]
print(l_convert2)
# [-0.5, -40, -0.3, -20, -0.1, 0, 0.1, 20, 0.3, 40, 0.5]