Ro‘yxatni qisqa yozish / takrorlash
Ro‘yxatni qisqa yozish
Ro‘yxatni qisqa yozish (list comprehension) mavjud ro‘yxat qiymatlari asosida yangi ro‘yxat yaratishda qisqaroq sintaksis taklif etadi.
Misol
Mevalar ro‘yxatidan faqat nomida "a" harfi borlarini olish.
Oddiy usul (list comprehension ishlatmasdan):
mevalar = ["olma", "banan", "gilos", "kivi", "mango"]
yangi_royhat = []
for x in mevalar:
if "a" in x:
yangi_royhat.append(x)
print(yangi_royhat) # Natija: ['olma', 'banan', 'gilos', 'mango']List comprehension yordamida:
mevalar = ["olma", "banan", "gilos", "kivi", "mango"]
yangi_royhat = [x for x in mevalar if "a" in x]
print(yangi_royhat) # Natija: ['olma', 'banan', 'gilos', 'mango']Sintaksis
yangi_royhat = [ifoda for element in takrorlanuvchi if shart == True]Natijada yangi ro‘yxat hosil bo‘ladi, eski ro‘yxat esa o‘zgarmaydi.
Shart (Condition)
Shart faqat True natija beradigan elementlarni ro‘yxatga qo‘shadi.
yangi_royhat = [x for x in mevalar if x != "olma"]Bu shart "olma" dan boshqa barcha elementlar uchun True qaytaradi, shuning uchun "olma" ro‘yxatda bo‘lmaydi.
Shart qo‘shish majburiy emas:
yangi_royhat = [x for x in mevalar] # Mevalar ro‘yxatining nusxasiTakrorlanuvchi obyekt (Iterable)
Takrorlanuvchi obyekt ro‘yxat, kortej, to‘plam yoki boshqa iterativ turlar bo‘lishi mumkin.
yangi_royhat = [x for x in range(10)] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]Shart qo‘shilgan holat:
yangi_royhat = [x for x in range(10) if x < 5] # [0, 1, 2, 3, 4]Ifoda (Expression)
Ifoda har bir takroriy elementni qanday natijaga aylantirishni belgilaydi.
yangi_royhat = [x.upper() for x in mevalar] # ['OLMA', 'BANAN', 'GILOS', 'KIVI', 'MANGO']Barcha qiymatlarni "Salom" so‘ziga almashtirish:
yangi_royhat = ["Salom" for x in mevalar] # ['Salom', 'Salom', 'Salom', 'Salom', 'Salom']Shartli o‘zgartirish:
yangi_royhat = [x if x != "banan" else "apelsin" for x in mevalar]Diqqat
Yuqoridagi misolda "banan" "apelsin" bilan almashtiriladi, qolgan elementlar o‘zgarishsiz qoladi.
