Derxistin û guheztina hêmanên ku şertên navnîşek (array) rêzikên di Python de têr dikin.

Dikan

Ji bo afirandina lîsteyek nû ji navnîşek (array) ku hêmanên wê rêzik in, bi derxistina tenê hêmanên rêzikan ên ku hin mercan têr dikin, an jî bi cîgirkirin, veguheztin û hwd., têgihîştina lîsteyê bikar bînin.

Piştî ravekek kurt a têgihîştina navnîşê, naverokên jêrîn bi koda nimûneyê têne rave kirin.

  • Derxistin li ser bingehê ku rêzek taybetî tê de ye an na (hevhatina qismî)
  • Li şûna rêzika taybetî
  • Bi rêzek taybetî dest pê bikin an ne dest pê bikin derxin
  • Bi xêzek taybetî bi dawîkirin an neqedandina jêderxistin
  • Li gorî dozê hate darizandin û derxistin
  • Tîpên mezin û piçûk veguherînin
  • Tesbît dike ka tîpên alfabetîk an hejmarî hatine bikaranîn û wan derdixe
  • Gelek şert û mercên
  • (komputer) birêkûpêk îfade

Bala xwe bidinê ku navnîş dikarin cûreyên cûda yên daneyan hilînin û bi tundî ji rêzan cûda ne. Heke hûn dixwazin di pêvajoyên ku hewceyê mezinahiya bîranînê û navnîşanên bîranînê an pêvajoya hejmarî ya daneyên mezin hewce dikin de rêzan bi rê ve bibin, array (pirtûkxaneya standard) an NumPy bikar bînin.

navnîşa tevlêbûna navnîşê

Dema ku ji navnîşek navnîşek nû çêdibe, têgihîştina navnîşê ji ya loopan hêsantir e.

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

Ger hêman tenê ji hêla vegotinek şertî ve were hilbijartin, ew ji hêla vegotinê ve nayê hilberandin, ji ber vê yekê ew forma jêrîn digire

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

Heke bêjeya şertî heke nebe bêjeyek şertî, ew dibe negasyon û hêmanên ku îfadeya şertê têr nakin dikarin werin derxistin.

Rêzek taybetî dihewîne (hevbera qismî) \ Nabe:in

Di “rêzika taybetî ya di rêzika orîjînal de”, heke rêzika orîjînal rêzika taybetî hebe, rast vedigerîne. Ev îfadeyeke şert e.

Înkarkirina in bi ne di tê kirin.

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']

Li şûna rêzika taybetî

Heke hûn dixwazin rêzek hêmanên navnîşê biguhezînin, ji bo her hêmanek di navnîşa têgihîştina navnîşê de rêbaza rêzikê () bikar bînin.

Ger rêzek tune ku were guheztin, ne hewce ye ku hêmanek di bêjeya şertî ya if de were bijartin ji ber ku ew bi sepandina şûna () nayê guhertin.

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

Heke hûn dixwazin tevaya hêmanek ku tê de rêzek taybetî heye biguhezînin, wê bi hundurê derxînin û bi operatora sêalî re pêvajoyê bikin. Operatora sêalî bi forma jêrîn tê nivîsandin.
True Value if Conditional Expression else False Value

Baş e heke beşê îfadeya nîşana têgihîştina navnîşê operatorek sêalî be.

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

Li jêr kurteya encaman e, di nav parantezê de ye. Heke hûn ji bo karanîna parantezê neyên bikar anîn, dibe ku ew hêsantir be ku hûn fêm bikin û ji xeletiyan dûr bixin. Ji aliyê rêzimanî ve her çend hûn parantezê binivîsin jî ti pirsgirêk nîne.

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

Bikaranîna in-ê wekî şert bi navnîşa têgihîştina navnîşê re tevlihev e, lê heke hûn ji forma hevoksaziya navnîşa têgihîştina navnîşê û operatorên sêalî haydar bin ne dijwar e.

Bi rêzek taybetî dest pê dike \ dest pê nake:startswith()

Rêbaza rêzikê startswith() rast vedigerîne ger rêzik bi rêzika ku di argumanê de hatî destnîşan kirin dest pê bike.

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']

Bi rêzek karakterek taybetî \ ne dawî dibe:endswith()

Rêbaza rêzikê endswith() rast vedigere ger rêz bi rêzika ku di argumanê de hatî destnîşan kirin biqede.

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']

Li gorî dozê hate darizandin û derxistin

Rêbazên rêzikan isupper(),islower() dikare were bikar anîn da ku diyar bike ka rêzik hemî tîpên jorîn e an hemî piçûk e.

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

Tîpên mezin û piçûk veguherînin

Heke hûn dixwazin hemî tîpan veguherînin tîpên jorîn an jêrîn, rêbazên rêzika jorîn () û jêrîn () bikar bînin. Rêbazên din di nav wan de kapîtalize(), ku tenê tîpa yekem mezin dike, û swapcase(), ku tîpên mezin û piçûk diguhezîne.

Mîna ku di mînaka veguheztinê ya li jor de, ger hûn dixwazin tenê hêmanên ku şertê têr dikin pêvajoyê bikin, operatora sêalî bikar bînin.

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']

Tesbît dike ka tîpên alfabetîk an hejmarî hatine bikaranîn û wan derdixe

Rêbazên rêzikan isalpha() û isnumeric() dikarin werin bikar anîn da ku diyar bikin ka rêzek hemî alfabetîk, hejmarî, hwd.

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']

Gelek şert û mercên

Beşa îfadeya şertî ya têgihîştina navnîşê dikare şertên pirjimar be. Mercên “ne” yên neyînî jî dikarin werin bikar anîn.

Dema ku sê an bêtir bêjeyên şertî bikar bînin, ewletir e ku meriv her komê di nav parantezê () de bihewîne ji ber ku encam dê li gorî rêzê diguhere.

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']

(komputer) birêkûpêk îfade

Gotinên birêkûpêk rê dide pêvajoyek pir maqûl.

Tişta lihevhatinê ku ji hêla re.match() ve tê vegerandin dema ku ew li hev dike, dema ku bi biwêjek şertî tê nirxandin her gav rast tê destnîşankirin. Ger li hev nebe, ew None vedigerîne, ku di îfadeya şertî de xelet e. Ji ber vê yekê, heke hûn dixwazin tenê hêmanên ku bi vegotina birêkûpêk re têkildar in derxînin, tenê wekî berê re.match() li beşa îfadeya şertî ya îfadeya têgihîştina navnîşê bicîh bikin.

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']

re.sub(), ku li şûna beşa lihevhatî ya bêjeyek birêkûpêk digire, di heman demê de bikêr e. Ji bo derxistin û şûna tenê hêmanên lihevhatî, tenê “ger îfadeya şert” lê zêde bike.

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']