Kanggo ngasilake dhaptar anyar saka dhaptar (array) sing unsur-unsur strings, kanthi ngekstrak mung unsur-unsur string sing nyukupi kondisi tartamtu, utawa kanthi nindakake substitusi, konversi, lan liya-liyane, gunakake pangerten dhaptar.
Sawise katrangan ringkes babagan pangerten dhaptar, isi ing ngisor iki dijlentrehake kanthi kode conto.
- Ekstraksi adhedhasar apa utawa ora ana string tartamtu (parsial cocog)
- Ganti string tartamtu
- Extract kanthi miwiti utawa ora miwiti karo senar tartamtu
- Ekstrak kanthi mungkasi utawa ora diakhiri karo senar tartamtu
- Diadili lan diekstrak miturut kasus
- Ngonversi huruf gedhe lan cilik
- Nemtokake apa karakter alfabet utawa numerik digunakake lan ekstrak
- Multiple kahanan
- (komputer) ekspresi reguler
Elinga yen dhaptar bisa nyimpen macem-macem jinis data lan beda banget karo array. Yen sampeyan pengin nangani array ing pangolahan sing mbutuhake ukuran memori lan alamat memori utawa pangolahan numerik saka data gedhe, nggunakake array (perpustakaan standar) utawa NumPy.
- daftar notasi inklusi
- Ngandhut string tartamtu (cocok parsial) \ Ora ngemot:in
- Ganti string tartamtu
- Diwiwiti karo string tartamtu \ ora diwiwiti:startswith()
- Dipungkasi nganggo string karakter tartamtu \ ora pungkasan:endswith()
- Diadili lan diekstrak miturut kasus
- Ngonversi huruf gedhe lan cilik
- Nemtokake apa karakter alfabet utawa numerik digunakake lan ekstrak
- Multiple kahanan
- (komputer) ekspresi reguler
daftar notasi inklusi
Nalika nggawe dhaptar anyar saka dhaptar, pangerten dhaptar luwih gampang ditulis tinimbang kanggo puteran.
[expression for any variable name in iterable object if conditional expression]
Yen unsur kasebut mung dipilih kanthi ekspresi kondisional, unsur kasebut ora diproses kanthi ekspresi, mula ana ing ngisor iki.
[variable name for variable name in original list if conditional expression]
Yen ekspresi kondisional yen digawe dadi ekspresi kondisional yen ora, dadi negasi, lan unsur sing ora marem ekspresi kondisional bisa diekstrak.
Ngandhut string tartamtu (cocok parsial) \ Ora ngemot:in
Ing “string tartamtu ing senar asli”, ngasilake True yen senar asli ngemot senar tartamtu. Iki minangka ekspresi kondisional.
Negasi saka ing rampung karo ora ing.
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']
Ganti string tartamtu
Yen sampeyan pengin ngganti senar saka unsur dhaftar, nggunakake cara senar ngganti () kanggo saben unsur ing dhaftar notasi pangerten.
Yen ora ana senar kanggo diganti, ora perlu kanggo milih unsur ing yen expression kondisional amarga ora bakal diganti dening nglamar ngganti ().
l_replace = [s.replace('XXX', 'ZZZ') for s in l]
print(l_replace)
# ['oneZZZaaa', 'twoZZZbbb', 'three999aaa', '000111222']
Yen sampeyan pengin ngganti kabeh unsur sing ngemot string tartamtu, extract karo ing lan proses karo operator ternary. Operator ternary ditulis ing wangun ing ngisor iki.True Value if Conditional Expression else False Value
Ora apa-apa yen bagean ekspresi saka notasi pangerten dhaptar minangka operator ternary.
l_replace_all = ['ZZZ' if 'XXX' in s else s for s in l]
print(l_replace_all)
# ['ZZZ', 'ZZZ', 'three999aaa', '000111222']
Ing ngisor iki ringkesan asil, dilampirake ing kurung. Yen sampeyan ora biasa nggunakake tanda kurung, bisa uga luwih gampang dingerteni lan ngindhari kesalahan. Secara gramatikal, ora ana masalah sanajan sampeyan nulis kurung.
[('ZZZ' if ('XXX' in s) else s) for s in l]
Panggunaan ing minangka kondisi bingung karo notasi pangerten dhaftar ing, nanging ora angel yen sampeyan ngerti wangun sintaksis saka dhaftar pangerten notasi lan operator ternary.
Diwiwiti karo string tartamtu \ ora diwiwiti:startswith()
Cara senar diwiwiti kanthi () ngasilake bener yen senar diwiwiti kanthi senar sing ditemtokake ing argumen kasebut.
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']
Dipungkasi nganggo string karakter tartamtu \ ora pungkasan:endswith()
Metode string endswith () ngasilake bener yen string rampung karo string sing ditemtokake ing argumen.
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']
Diadili lan diekstrak miturut kasus
Metode senar isupper (), islower () bisa digunakake kanggo nemtokake yen senar kabeh ndhuwur utawa kabeh huruf cilik.
l_lower = [s for s in l if s.islower()]
print(l_lower)
# ['three999aaa']
Ngonversi huruf gedhe lan cilik
Yen sampeyan pengin ngowahi kabeh karakter kanggo huruf gedhe utawa cilik, nggunakake cara senar ndhuwur () lan ngisor (). Cara liyane kalebu kapitalisasi (), sing mung huruf kapital, lan swapcase (), sing ngganti huruf gedhe lan cilik.
Kaya ing conto substitusi ing ndhuwur, gunakake operator ternary yen sampeyan mung pengin ngolah unsur sing nyukupi kondisi kasebut.
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']
Nemtokake apa karakter alfabet utawa numerik digunakake lan ekstrak
Metode senar isalpha () lan isnumeric () bisa digunakake kanggo nemtokake manawa senar kabeh abjad, angka, lsp.
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']
Multiple kahanan
Bagian ekspresi kondisional saka pangerten dhaptar bisa dadi pirang-pirang kahanan. Kondisi “ora” negatif uga bisa digunakake.
Nalika nggunakake telu utawa luwih ungkapan kondisional, iku luwih aman kanggo nyakup saben klompok ing kurung () amarga asil bakal beda-beda gumantung ing urutan.
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) ekspresi reguler
Ekspresi reguler ngidini pangolahan sing fleksibel.
Objek match bali dening re.match () nalika cocog tansah ditemtokake bener nalika dievaluasi karo expression saratipun. Yen ora cocog, bali Ora Ana, kang palsu ing expression kondisional. Dadi, yen sampeyan pengin extract mung unsur sing cocog karo expression biasa, mung aplikasi re.match () kanggo bagean expression kondisional saka expression pangerten dhaftar minangka sadurunge.
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 (), kang ngganti bagean dicocogaké saka expression biasa, uga migunani. Kanggo ngekstrak lan ngganti mung unsur sing cocog, tambahake “yen ekspresi kondisional”.
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']