Пост 05.05.2025
1. String nima?
Python'da string - bu matnli ma'lumotlarni ifodalash uchun ishlatiladigan ma'lumot turi. Stringlar belgilar ketma-ketligidan iborat bo'lib, ular bir tirnoq ('), ikkita tirnoq (") yoki uchta tirnoq (""") ichida yoziladi. Python'da stringlar Unicode formatida saqlanadi, ya'ni har qanday til yoki maxsus belgilarni (masalan, emoji yoki alohida simvollar) qo'llab-quvvatlaydi.
Stringlarning muhim xususiyati - ular o'zgarmas (immutable). Bu shuni anglatadiki, string yaratilgandan so'ng uning ichidagi belgilarni to'g'ridan-to'g'ri o'zgartirib bo'lmaydi. Agar o'zgartirish kerak bo'lsa, yangi string yaratiladi.
1.1. String yaratish usullari
Stringlarni turli usullarda yaratish mumkin:
# Oddiy stringlar ism = "Ali" # Ikkita tirnoq bilan shahar = 'Toshkent' # Bitta tirnoq bilan bosh_string = "" # Bo'sh string # Ko'p qatorli string uzun_matn = """Bu ko'p qatorli matn misoli. Uchta tirnoq bilan yoziladi.""" # Raw string (escape belgilarni o'qimaydi) raw_matn = r"C:\\new\\test.txt" # Unicode string unicode_matn = "Salom \\u2764 Dunyo" # Yurak belgisi print(ism) # Natija: Ali print(shahar) # Natija: Toshkent print(uzun_matn) # Natija: Ko'p qatorli matn print(raw_matn) # Natija: C:\\new\\test.txt print(unicode_matn) # Natija: Salom ❤ Dunyo
- Bitta va ikkita tirnoq: Ikkalasini ham ishlatish mumkin, lekin ichma-ich tirnoq ishlatilganda ehtiyot bo'lish kerak (masalan,
"O'zbekiston"yoki'O"zbekiston'). - Uchta tirnoq: Ko'p qatorli matnlar, uzun sharhlar yoki SQL so'rovlari kabi murakkab matnlar uchun ishlatiladi.
- Raw string:
rprefiksi escape belgilarni (\\n,\\t) oddiy belgi sifatida talqin qiladi. Bu fayl yo'llari yoki regexlarda foydali. - Unicode:
\\uyoki\\Ubilan maxsus belgilarni qo'shish mumkin.
1.2. Stringning ichki tuzilishi
Python'da stringlar belgilar ketma-ketligi sifatida saqlanadi. Har bir belgi o'ziga xos indeks raqamiga ega:
- Ijobiy indekslar: 0 dan boshlanadi (chapdan o'ngga).
- Salbiy indekslar: -1 dan boshlanadi (o'ngdan chapga).
matn = "Python" # Indekslar: P y t h o n # Ijobiy: 0 1 2 3 4 5 # Salbiy: -6 -5 -4 -3 -2 -1
2. Stringlar bilan asosiy operatsiyalar
Stringlar bilan ishlashda bir nechta asosiy operatsiyalar mavjud.
2.1. Stringlarni birlashtirish (Concatenation)
+ operatori yordamida ikki yoki undan ko'p stringlarni birlashtirish mumkin.
first_name = "Ali" last_name = "Valiyev" full_name = ism + " " + familiya # Bo'shliq qo'shish print(full_name) # Natija: Ali Valiyev
Eslatma: Ko'p sonli stringlarni + bilan birlashtirish sekin ishlashi mumkin, chunki har bir birlashtirishda yangi string yaratiladi. Buning o'rniga join() metodi tavsiya etiladi (keyinroq tushuntiriladi).
2.2. Stringni takrorlash
soz = "Salom! " takrorlangan = soz * 3 print(takrorlangan) # Natija: Salom! Salom! Salom!
chiziq = "-" * 20 print(chiziq) # Natija: --------------------
2.3. String uzunligini aniqlash
len() funksiyasi stringdagi belgilar sonini (bo'shliqlar va maxsus belgilarni hisobga olgan holda) qaytaradi.
matn = "Python o'rganish qiziqarli!" uzunlik = len(matn) print(uzunlik) # Natija: 25
Izoh: Unicode belgilari (masalan, emoji) odatda bitta belgi sifatida hisoblanadi.
2.4. String indekslari va kesish (Slicing)
Stringdagi har bir belgi indeks orqali murojaat qilinadi. Kesish (slicing) esa stringning bir qismini olish imkonini beradi.
matn = "Python" # Indeks orqali belgi olish birinchi_harf = matn[0] # 0-indeksdagi belgi oxirgi_harf = matn[-1] # Oxirgi belgi print(birinchi_harf) # Natija: P print(oxirgi_harf) # Natija: n # Kesish (slicing) qism = matn[1:4] # 1-indeksdan 4-indeksgacha (4 kirmaydi) print(qism) # Natija: yth # Qadamli kesish har_ikkinchi = matn[::2] # Har ikkinchi belgi teskari = matn[::-1] # Teskari tartib print(har_ikkinchi) # Natija: Pto print(teskari) # Natija: nohtyP
Kesish formati: [start:stop:step]
start: Qayerdan boshlash (agar bo'sh bo'lsa 0-indeksdan boshlab).stop: Qayergacha (bu indeks kirmaydi, agar bo'sh bo'lsa oxirigacha oladi).step: Qadam (agar bo'sh bo'lsa 1).
matn = "Salom, Dunyo!" print(matn[::2]) # Natija: Slo uy! print(matn[-5:-1]) # Natija: unyo
2.5. String ichida kerali belgilar bor yoki yo’qligini tekshirish
in va not in operatorlari string ichida qism bor-yo'qligini tekshiradi.
matn = "Salom, Dunyo!"
if "Dunyo" in matn:
print("Dunyo so'zi mavjud") # Natija: Dunyo so'zi mavjud
if "Olam" not in matn:
print("Olam so'zi mavjud emas") # Natija: Olam so'zi mavjud emas
2.6. Stringlarni taqqoslash
Stringlar ==, !=, <, >, <=, >= operatorlari bilan taqqoslanadi. Taqqoslash Unicode kodlari asosida amalga oshiriladi (alfbo tartibida).
matn1 = "Ali" matn2 = "Bob" print(matn1 == matn2) # Natija: False print(matn1 < matn2) # Natija: True (A < B)
3. String metodlari
Python'da stringlar bilan ishlash uchun 40 dan ortiq metod mavjud. Quyida barcha metodlar guruhlarga bo'lingan holda, har biri uchun misollar va qo'llanilishi tushuntiriladi.
3.1. Harf registrini o'zgartirish metodlari
Bu metodlar stringdagi harflarning katta-kichikligini o'zgartiradi. Belgilar (raqamlar, simvollar) o'zgarmaydi.
matn = "salom DUNYO" print(matn.upper()) # Natija: SALOM DUNYO
print(matn.lower()) # Natija: salom dunyo
matn = "salom dunyo python" print(matn.title()) # Natija: Salom Dunyo Python
print(matn.capitalize()) # Natija: Salom dunyo python
matn = "Salom DUNYO" print(matn.swapcase()) # Natija: sALOM dunyo
Eslatma: Ushbu metodlar yangi string qaytaradi, asl string o'zgarmaydi.
3.2. Bo'shliq va maxsus belgilarni tozalash metodlari
Bu metodlar stringning boshida yoki oxirida joylashgan bo'shliqlar yoki maxsus belgilarni olib tashlaydi.
matn = "!!! Salom Dunyo !!!"
print(matn.strip()) # Natija: Salom Dunyo
print(matn.strip("!")) # Natija: Salom Dunyo
print(matn.lstrip("!")) # Natija: Salom Dunyo !!!
print(matn.rstrip("!")) # Natija: !!! Salom Dunyo
Izoh: chars parametri bo'lmasa, bo'shliqlar, tabulyatsiyalar (\\t), yangi qatorlar (\\n) olib tashlanadi.
3.3. Matnni qidirish va almashtirish metodlari
Bu metodlar string ichida qismni qidirish yoki almashtirish uchun ishlatiladi.
find(sub[, start[, end]]): Qismning birinchi paydo bo'lish indeksini qaytaradi. Topilmasa, -1 qaytaradi.
matn = "Salom, Dunyo! Dunyo yaxshi."
print(matn.find("Dunyo")) # Natija: 7
print(matn.find("Olam")) # Natija: -1
print(matn.find("Dunyo", 8)) # 8-indeksdan qidirish; Natija: 14
print(matn.rfind("Dunyo")) # Natija: 14
print(matn.index("Dunyo")) # Natija: 7
# print(matn.index("Olam")) # ValueError
print(matn.rindex("Dunyo")) # Natija: 14
replace(old, new[, count]): Qismni yangi matn bilan almashtiradi.countbilan almashtirish sonini cheklash mumkin.
print(matn.replace("Dunyo", "Olam")) # Natija: Salom, Olam! Olam yaxshi.
print(matn.replace("Dunyo", "Olam", 1)) # Natija: Salom, Olam! Dunyo yaxshi.
3.4. Matnni bo'lish va birlashtirish metodlari
Bu metodlar stringni bo'lish yoki ro'yxatni stringga birlashtirish uchun ishlatiladi.
matn = "Python,Java,C++,Go"
print(matn.split(",")) # Natija: ['Python', 'Java', 'C++', 'Go']
print(matn.split(",", 1)) # Natija: ['Python', 'Java,C++,Go']
print(matn.rsplit(",", 1)) # Natija: ['Python,Java,C++', 'Go']
splitlines([keepends]): Matnni qatorlarga bo'ladi.keepends=Truebo'lsa, yangi qator belgilari saqlanadi.
ko_p_qator = "Birinchi qator\\nIkkinchi qator" print(ko_p_qator.splitlines()) # Natija: ['Birinchi qator', 'Ikkinchi qator'] print(ko_p_qator.splitlines(True)) # Natija: ['Birinchi qator\\n', 'Ikkinchi qator']
suzlar = ['Python', 'Java', 'C++']
print("-".join(suzlar)) # Natija: Python-Java-C++
matn = "Python,Java,C++"
print(matn.partition(",")) # Natija: ('Python', ',', 'Java,C++')
print(matn.rpartition(",")) # Natija: ('Python,Java', ',', 'C++')
3.5. Tekshirish metodlari
Bu metodlar stringning tarkibini tekshiradi va True yoki False qaytaradi.
print("Python123".isalnum()) # Natija: True
print("Python 123".isalnum()) # Natija: False (bo'shliq bor)
print("Python".isalpha()) # Natija: True
print("Python123".isalpha()) # Natija: False
print("123".isdigit()) # Natija: True
print("12a3".isdigit()) # Natija: False
print("123".isdecimal()) # Natija: True
print("²".isdecimal()) # Natija: False
print("123".isnumeric()) # Natija: True
print("½".isnumeric()) # Natija: True
print(" ".isspace()) # Natija: True
print(" a ".isspace()) # Natija: False
print("salom".islower()) # Natija: True
print("Salom".islower()) # Natija: False
print("SALOM".isupper()) # Natija: True
print("Salom".isupper()) # Natija: False
print("Salom Dunyo".istitle()) # Natija: True
print("Salom dunyo".istitle()) # Natija: False
matn = "Salom, Dunyo!"
print(matn.startswith("Salom")) # Natija: True
print(matn.startswith("Dunyo", 7)) # Natija: True
print(matn.endswith("Dunyo!")) # Natija: True
print(matn.endswith("Salom", 0, 5)) # Natija: True
3.6. Formatlash va joylashtirish metodlari
Bu metodlar stringni ma'lum uzunlikda formatlash yoki joylashtirish uchun ishlatiladi.
matn = "Python" print(matn.center(10, "*")) # Natija: **Python**
print(matn.ljust(10, "-")) # Natija: Python----
print(matn.rjust(10, "-")) # Natija: ----Python
print("42".zfill(5)) # Natija: 00042
print("-42".zfill(5)) # Natija: -0042
3.7. Maxsus metodlar
Bu metodlar maxsus holatlarda ishlatiladi.
matn = "Salom\\tDunyo" print(matn.expandtabs(4)) # Natija: Salom Dunyo
translate(table): Belgilarni almashtirish jadvaliga ko'ra o'zgartiradi.maketrans(x[, y[, z]]): Almashtirish jadvalini yaratadi.
jadval = str.maketrans("aeiou", "12345")
print("Salom".translate(jadval)) # Natija: S1l4m
# Belgilarni o'chirish
jadval = str.maketrans("", "", "aeiou")
print("Salom".translate(jadval)) # Natija: Slm
3.8. Kodlash va dekodlash metodlari
Stringlar Unicode formatida bo'lsa-da, ularni baytlarga aylantirish mumkin.
matn = "Salom, Дунё!"
baytlar = matn.encode("utf-8")
print(baytlar) # Natija: b'Salom, \\xd0\\x94\\xd1\\x83\\xd0\\xbd\\xd1\\x91!'
print("Python".isascii()) # Natija: True
print("Salom, Дунё!".isascii()) # Natija: False
4. String formatlash usullari
Python'da stringlarni formatlashning bir nechta usullari mavjud. Quyida har biri chuqur tushuntiriladi.
4.1. % operatori (Eski usul)
Bu usul C tilidagi printf funksiyasiga o'xshaydi.
ism = "Ali" yosh = 25 matn = "Ismim %s, yoshim %d" % (ism, yosh) print(matn) # Natija: Ismim Ali, yoshim 25
narx = 19.99
print("Narx: %.2fquot; % narx) # Natija: Narx: 19.99$
4.2. format() metodi
Bu usul ko'proq moslashuvchan va zamonaviyroq.
matn = "Ismim {}, yoshim {}".format("Ali", 25)
print(matn) # Natija: Ismim Ali, yoshim 25
# Indeksli formatlash
matn = "Ismim {0}, yoshim {1}, yana ismim {0}".format("Ali", 25)
print(matn) # Natija: Ismim Ali, yoshim 25, yana ismim Ali
# Ismli formatlash
matn = "Ismim {ism}, yoshim {yosh}".format(ism="Ali", yosh=25)
print(matn) # Natija: Ismim Ali, yoshim 25
4.3. f-string (Python 3.6+, Eng zamonaviy)
f-stringlar eng qulay va tez usul hisoblanadi.
ism = "Ali"
yosh = 25
matn = f"Ismim {ism}, yoshim {yosh}"
print(matn) # Natija: Ismim Ali, yoshim 25
# Ifodalar bilan
matn = f"Yoshim {yosh + 5} bo'ladi 5 yildan keyin"
print(matn) # Natija: Yoshim 30 bo'ladi 5 yildan keyin
son = 42
print(f"Son: {son:05d}") # Natija: Son: 00042
print(f"Son: {son:.2f}") # Natija: Son: 42.00
4.4. str.format_map() bilan formatlash
Lug'atlar bilan ishlash uchun qulay.
data = {"ism": "Ali", "yosh": 25}
matn = "Ismim {ism}, yoshim {yosh}".format_map(data)
print(matn) # Natija: Ismim Ali, yoshim 25
5. Escape belgilari va Unicode
5.1. Escape belgilari
Escape belgilari maxsus ma'noga ega bo'lib, \\ bilan boshlanadi:
\\n: Yangi qator\\t: Tabulyatsiya\\\\: Orqa chiziq\\": Ikkita tirnoq\\': Bitta tirnoq\\r: Qaytish belgisi\\b: Backspace
matn = "Salom\\nDunyo\\tPython\\\\test" print(matn) # Natija: # Salom # Dunyo Python\\test
5.2. Unicode belgilari
Unicode belgilari \\u (4 xonali) yoki \\U (8 xonali) bilan yoziladi.
matn = "Salom \\u2764 Dunyo" # Yurak belgisi print(matn) # Natija: Salom ❤ Dunyo matn = "Emoji: \\U0001F600" # Kulayotgan emoji print(matn) # Natija: Emoji: 😊
Izoh: Unicode belgilarni topish uchun unicode.org yoki maxsus jadvallardan foydalaning.
6. Stringlar bilan ishlashda maxsus holatlar
6.1. O'zgarmaslik (Immutability)
Stringlar o'zgarmas bo'lgani uchun to'g'ridan-to'g'ri o'zgartirish mumkin emas.
matn = "Python" # matn[0] = 'J' # TypeError: 'str' object does not support item assignment matn = "J" + matn[1:] # Yangi string yaratish print(matn) # Natija: Jython
6.2. Performans masalalari
Ko'p sonli string birlashtirishlarda + operatori sekin ishlaydi, chunki har safar yangi string yaratiladi.
# Yomon usul
natija = ""
for i in range(1000):
natija += str(i)
Yaxshi usul: join() bilan ro'yxatdan foydalanish.
natija = "".join(str(i) for i in range(1000))
6.3. Case sensitivity
Stringlar harf katta-kichikligiga sezgir. Masalan:
print("Python" == "python") # Natija: False
7. Amaliy misollar
Misol 1: Parolni tekshirish
def parolni_tekshir(parol):
if (len(parol) >= 8 and
any(c.isupper() for c in parol) and
any(c.islower() for c in parol) and
any(c.isdigit() for c in parol) and
any(not c.isalnum() for c in parol)):
return "Parol kuchli"
return "Parol zaif"
print(parolni_tekshir("Python123!")) # Natija: Parol kuchli
print(parolni_tekshir("python")) # Natija: Parol zaif
Misol 2: Matnni so'zlarga bo'lib, statistika chiqarish
matn = "Python dasturlash tili juda qulay va kuchli"
suzlar = matn.split()
uzunliklar = [len(suz) for suz in suzlar]
eng_uzun = max(suzlar, key=len)
print(f"So'zlar: {suzlar}") # Natija: ['Python', 'dasturlash', 'tili', 'juda', 'qulay', 'va', 'kuchli']
print(f"Uzunliklar: {uzunliklar}") # Natija: [6, 10, 4, 4, 5, 2, 6]
print(f"Eng uzun so'z: {eng_uzun}") # Natija: dasturlash
Misol 3: Emailni tasdiqlash
def emailni_tekshir(email):
if ("@" in email and
email.count("@") == 1 and
email.endswith((".com", ".org", ".net")) and
email[0].isalnum() and
len(email.split("@")[1].split(".")[0]) > 0):
return "Email to'g'ri"
return "Email noto'g'ri"
print(emailni_tekshir("user@example.com")) # Natija: Email to'g'ri
print(emailni_tekshir("user@@example.com")) # Natija: Email noto'g'ri
Misol 4: Caesar shifri bilan shifrlash
def caesar_shifr(matn, siljish):
natija = ""
for belgi in matn:
if belgi.isalpha():
ascii_kod = ord(belgi)
baza = 65 if belgi.isupper() else 97
yangi_kod = (ascii_kod - baza + siljish) % 26 + baza
natija += chr(yangi_kod)
else:
natija += belgi
return natija
matn = "Salom, Dunyo!"
shifrlangan = caesar_shifr(matn, 3)
print(shifrlangan) # Natija: Vdorp, Gxqbr
Misol 5: Palindromni tekshirish
def palindrommi(matn):
tozalangan = "".join(c.lower() for c in matn if c.isalnum())
return tozalangan == tozalangan[::-1]
print(palindrommi("A man, a plan, a canal: Panama")) # Natija: True
print(palindrommi("Python")) # Natija: False
8. Stringlar bilan ishlashda ehtiyotkorlik
- O'zgarmaslik: Har qanday o'zgartirish yangi string yaratadi. Bu xotirani ko'p ishlatishi mumkin.
- Unicode muammolari: Turli tillardagi matnlar bilan ishlashda
encode/decodemetodlariga e'tibor bering. - Bo'shliqlar:
strip(),lstrip(),rstrip()metodlari bo'shliqlarni e'tiborsiz qoldirishni oldini oladi. - Case sensitivity: Katta-kichik harflarga e'tibor bering, chunki ular farqli belgilar sifatida qabul qilinadi.
- Performans: Katta matnlarda
join()va ro'yxatlardan foydalanish+ga qaraganda samaraliroq.
Python'da stringlar dasturlashning eng muhim va ko'p qirrali qismidir. Ular bilan ishlash uchun boy metodlar, operatsiyalar va formatlash usullari mavjud. Ushbu qo'llanma stringlarning har bir detalini - yaratishdan tortib, murakkab manipulyatsiyalargacha - chuqur yoritdi. Misollar va izohlar yordamida siz stringlar bilan ishlashni to'liq o'zlashtira olasiz. Amaliyot uchun yuqoridagi misollarni sinab ko'ring va o'zingizning loyihalaringizda qo'llang. Stringlarni yaxshi bilish Python dasturchisi uchun muhim ko'nikmadir!