Python-da sətirlərin siyahısının (massivinin) şərtlərinə cavab verən elementlərin çıxarılması və dəyişdirilməsi

Biznes

Elementləri sətir olan siyahıdan (massivdən) yeni siyahı yaratmaq üçün yalnız müəyyən şərtləri ödəyən sətirlərin elementlərini çıxarmaqla və ya əvəzetmələr, çevirmələr və s. yerinə yetirməklə siyahı anlamalarından istifadə edin.

Siyahı anlayışlarının qısa izahından sonra aşağıdakı məzmunlar nümunə kodu ilə izah olunur.

  • Xüsusi sətrin daxil edilib-edilməməsinə əsaslanan çıxarış (qismən uyğunluq)
  • Xüsusi sətir dəyişdirin
  • Müəyyən bir sətirdən başlayaraq və ya başlamamaqla çıxarın
  • Müəyyən bir sətirlə bitən və ya bitməyən çıxarış
  • İş üzrə mühakimə olunur və çıxarılır
  • Böyük və kiçik hərfi çevirin
  • Əlifba və ya ədədi simvolların istifadə olunduğunu müəyyən edir və onları çıxarır
  • Çoxlu şərtlər
  • (kompüter) müntəzəm ifadə

Qeyd edək ki, siyahılar müxtəlif növ məlumatları 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ıya daxil edilmə qeydi

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]

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]

Əgər şərt ifadəsi if not şərt ifadəsinə çevrilirsə, o, inkara çevrilir və şərti ifadəni təmin etməyən elementlər çıxarıla bilər.

Xüsusi sətir ehtiva edir (qismən uyğunluq) \ İçəri yoxdur:in

“Orijinal sətirdəki xüsusi sətir”də orijinal sətirdə xüsusi sətir varsa True qaytarır. Bu şərti ifadədir.

in inkarı not in ilə edilir.

l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222']

l_in = [s for s in l if 'XXX' in s]
print(l_in)
# ['oneXXXaaa', 'twoXXXbbb']

l_in_not = [s for s in l if 'XXX' not in s]
print(l_in_not)
# ['three999aaa', '000111222']

Xüsusi sətir dəyişdirin

Siyahı elementləri sətirini əvəz etmək istəyirsinizsə, siyahının başa düşülməsi qeydindəki hər bir element üçün string əvəz () metodundan istifadə edin.

Əvəz ediləcək sətir yoxdursa, if şərt ifadəsində elementi seçməyə ehtiyac yoxdur, çünki o, replace() funksiyasını tətbiq etməklə dəyişdirilməyəcək.

l_replace = [s.replace('XXX', 'ZZZ') for s in l]
print(l_replace)
# ['oneZZZaaa', 'twoZZZbbb', 'three999aaa', '000111222']

Müəyyən bir sətri ehtiva edən bütün elementi əvəz etmək istəyirsinizsə, onu in ilə çıxarın və üçlü operatorla emal edin. Üçlü operator aşağıdakı formada yazılır.
True Value if Conditional Expression else False Value

Siyahının başa düşülməsi qeydinin ifadə hissəsi üçlü operatordursa, bu, yaxşıdır.

l_replace_all = ['ZZZ' if 'XXX' in s else s for s in l]
print(l_replace_all)
# ['ZZZ', 'ZZZ', 'three999aaa', '000111222']

Aşağıda mötərizədə verilmiş nəticələrin xülasəsi verilmişdir. Mötərizələrdən istifadə etməyə öyrəşməmisinizsə, başa düşmək və səhvlərdən qaçınmaq daha asan ola bilər. Qrammatik olaraq mötərizə yazsanız da problem yoxdur.

[('ZZZ' if ('XXX' in s) else s) for s in l]

Şərt kimi in istifadə edilməsi siyahı başa düşmə notasiyası ilə çaşqınlıq yaradır, lakin siyahının başa düşülməsi qeydinin sintaktik formasından və üçlü operatorlardan xəbərdarsınızsa, bu çətin deyil.

Müəyyən bir sətirlə başlayır \ başlamaz:startswith()

Əgər sətir arqumentdə göstərilən sətirlə başlayırsa, string metodu startswith() doğru qaytarır.

l_start = [s for s in l if s.startswith('t')]
print(l_start)
# ['twoXXXbbb', 'three999aaa']

l_start_not = [s for s in l if not s.startswith('t')]
print(l_start_not)
# ['oneXXXaaa', '000111222']

Xüsusi simvol sətri ilə bitir \ bitməz:endswith()

Sim metodu endswith() sətir arqumentdə göstərilən sətirlə bitirsə doğru qaytarır.

l_end = [s for s in l if s.endswith('aaa')]
print(l_end)
# ['oneXXXaaa', 'three999aaa']

l_end_not = [s for s in l if not s.endswith('aaa')]
print(l_end_not)
# ['twoXXXbbb', '000111222']

İş üzrə mühakimə olunur və çıxarılır

Isupper(),islower() sətir üsulları sətirin hamısının böyük və ya kiçik olduğunu müəyyən etmək üçün istifadə edilə bilər.

l_lower = [s for s in l if s.islower()]
print(l_lower)
# ['three999aaa']

Böyük və kiçik hərfi çevirin

Bütün simvolları böyük və ya kiçik hərflərə çevirmək istəyirsinizsə, yuxarı() və aşağı() sətir metodlarından istifadə edin. Digər üsullara yalnız birinci hərfi böyük hərflə yazan böyük hərf() və böyük və kiçik hərfləri dəyişdirən swapcase() daxildir.

Yuxarıdakı əvəzetmə nümunəsində olduğu kimi, yalnız şərti təmin edən elementləri emal etmək istəyirsinizsə, üçlü operatordan istifadə edin.

l_upper_all = [s.upper() for s in l]
print(l_upper_all)
# ['ONEXXXAAA', 'TWOXXXBBB', 'THREE999AAA', '000111222']

l_lower_to_upper = [s.upper() if s.islower() else s for s in l]
print(l_lower_to_upper)
# ['oneXXXaaa', 'twoXXXbbb', 'THREE999AAA', '000111222']

Əlifba və ya ədədi simvolların istifadə olunduğunu müəyyən edir və onları çıxarır

sətir üsulları isalpha() və isnumeric() sətirin hamısının əlifba, rəqəm və s. olduğunu müəyyən etmək üçün istifadə edilə bilər.

l_isalpha = [s for s in l if s.isalpha()]
print(l_isalpha)
# ['oneXXXaaa', 'twoXXXbbb']

l_isnumeric = [s for s in l if s.isnumeric()]
print(l_isnumeric)
# ['000111222']

Çoxlu şərtlər

Siyahı anlayışlarının şərti ifadə hissəsi bir neçə şərt ola bilər. Mənfi “yox” şərtləri də istifadə edilə bilər.

Üç və ya daha çox şərti ifadədən istifadə edərkən, hər bir qrupu mötərizə () içərisində çəkmək daha təhlükəsizdir, çünki nəticə sıradan asılı olaraq dəyişəcəkdir.

l_multi = [s for s in l if s.isalpha() and not s.startswith('t')]
print(l_multi)
# ['oneXXXaaa']

l_multi_or = [s for s in l if (s.isalpha() and not s.startswith('t')) or ('bbb' in s)]
print(l_multi_or)
# ['oneXXXaaa', 'twoXXXbbb']

(kompüter) müntəzəm ifadə

Daimi ifadələr yüksək çevik emal etməyə imkan verir.

Uyğunlaşdıqda re.match() tərəfindən qaytarılan uyğunluq obyekti şərti ifadə ilə qiymətləndirildikdə həmişə doğru olaraq təyin olunur. Əgər uyğun gəlmirsə, şərti ifadədə yanlış olan None qaytarır. Beləliklə, əgər siz yalnız normal ifadəyə uyğun gələn elementləri çıxarmaq istəyirsinizsə, sadəcə olaraq əvvəlki kimi siyahı anlama ifadəsinin şərti ifadə hissəsinə re.match() tətbiq edin.

import re

l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222']

l_re_match = [s for s in l if re.match('.*XXX.*', s)]
print(l_re_match)
# ['oneXXXaaa', 'twoXXXbbb']

Normal ifadənin uyğun hissəsini əvəz edən re.sub() da faydalıdır. Yalnız uyğun elementləri çıxarmaq və əvəz etmək üçün “şərti ifadə varsa” əlavə edin.

l_re_sub_all = [re.sub('(.*)XXX(.*)', r'\2---\1', s) for s in l]
print(l_re_sub_all)
# ['aaa---one', 'bbb---two', 'three999aaa', '000111222']

l_re_sub = [re.sub('(.*)XXX(.*)', r'\2---\1', s) for s in l if re.match('.*XXX.*', s)]
print(l_re_sub)
# ['aaa---one', 'bbb---two']
Copied title and URL