38 / 59

Python List Comprehension

List comprehension bilan tanishish

List comprehension mavjud ro'yxatning qiymatlariga asoslanib yangi ro'yxat yaratishning ixcham usulini taklif etadi.

Aytaylik, bizda sonlar ro'yxati bor va biz ro'yxatdagi har bir elementning ikki barobar qiymatini o'z ichiga olgan yangi ro'yxat yaratmoqchimiz.

example.py
numbers = [1, 2, 3, 4]

# yangi ro'yxat yaratish uchun list comprehension
doubled_numbers = [num * 2 for num in numbers]

print(doubled_numbers)

Natija

kod
[2, 4, 6, 8]

Mana list comprehension qanday ishlashi:

Python List Comprehension

List Comprehension sintaksisi

kod
[ifoda for element ro'yxatda if shart == True]

Bu yerda,

ro'yxatdagi har bir element uchun, agar shart True bo'lsa, ifodani bajaring.

Eslatma: List comprehension'dagi if operatori ixtiyoriy.

for Loop vs. List Comprehension

List comprehension kodni for siklidan ko'ra tozaroq va ixchamroq qiladi.

Keling, ro'yxatning har bir elementining kvadratini ham for sikli, ham list comprehension yordamida chop etuvchi dastur yozamiz.

for Loop

example.py
numbers = [1, 2, 3, 4, 5]
square_numbers = []

# har bir elementni kvadratga oshirish uchun for sikli
for num in numbers:
    square_numbers.append(num * num)
    
print(square_numbers)

# Natija: [1, 4, 9, 16, 25]

List Comprehension

example.py
numbers = [1, 2, 3, 4, 5]

# list comprehension yordamida yangi ro'yxat yaratish
square_numbers = [num * num for num in numbers]

print(square_numbers)

# Natija: [1, 4, 9, 16, 25]

Python for sikli haqida bilganingizdan so'ng, list comprehension'ni tushunish ancha osonroq.

List Comprehension'da shartlar

List comprehension mavjud ro'yxatlarni filtrlash uchun if...else kabi shartli operatorlardan foydalanishi mumkin.

Keling, list comprehension bilan if operatoriga misolni ko'ramiz.

example.py
# ro'yxatdan juft sonlarni filtrlash
even_numbers = [num for num in range(1, 10) if num % 2 == 0 ]

print(even_numbers)

# Natija: [2, 4, 6, 8]

Bu yerda, list comprehension range(1, 10)dagi son juft yoki toq ekanligini tekshiradi. Agar juft bo'lsa, u sonni ro'yxatga qo'shadi.

Eslatma: range() funksiyasi sonlar ketma-ketligini generatsiya qiladi. Ko'proq bilish uchun, Python range() sahifasiga tashrif buyuring.

List Comprehension bilan if...else

Keling, juft va toq sonlarni topish uchun list comprehension bilan if...elsedan foydalanamiz.

example.py
numbers = [1, 2, 3, 4, 5, 6]

# juft va toq sonlarni topish
even_odd_list = ["Even" if i % 2 == 0 else "Odd" for i in numbers]

print(even_odd_list)

Natija

kod
['Odd', 'Even', 'Odd', 'Even', 'Odd', 'Even']

Bu yerda, agar numbers ro'yxatidagi element 2ga bo'linsa, u even_odd_list ro'yxatiga Evenni qo'shadi. Aks holda, u Oddni qo'shadi.

List Comprehension bilan ichma-ich if

Keling, 5ga bo'linadigan juft sonlarni topish uchun list comprehension bilan ichma-ich ifdan foydalanamiz.

example.py
# 5ga bo'linadigan juft sonlarni topish
num_list = [y for y in range(100) if y % 2 == 0 if y % 5 == 0]

print(num_list)

Natija

kod
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

Bu yerda, list comprehension ikkita shartni tekshiradi:

  1. y 2ga bo'linadimi yoki yo'qmi.
  2. Agar ha bo'lsa, y 5ga bo'linadimi yoki yo'qmi.

Agar y ikkala shartni ham qanoatlantirsa, son num_listga qo'shiladi.

Misol: Satr bilan List Comprehension

List comprehension'ni ro'yxatdan boshqa iterable'lar bilan ham ishlatishimiz mumkin.

example.py
word = "Python"
vowels = "aeiou"

# "Python" satrida unlini topish
result = [char for char in word if char in vowels]

print(result)

# Natija: ['o']

Bu yerda, biz 'Python' satridagi unlilarni topish uchun list comprehension'dan foydalandik.

Ichma-ich List Comprehension

List comprehension'da ichma-ich sikllardan ham foydalanishimiz mumkin. Keling, ko'paytirish jadvalini hisoblovchi kod yozamiz.

example.py
multiplication = [[i * j for j in range(1, 6)] for i in range(2, 5)]

print(multiplication)

Natija

kod
[[2, 4, 6, 8, 10], [3, 6, 9, 12, 15], [4, 8, 12, 16, 20]]

Mana ichma-ich list comprehension qanday ishlashi:

Ichma-ich list comprehension'dagi sikl

Keling, ichma-ich for sikli yordamida ekvivalent kodni ko'ramiz.

Ekvivalent ichma-ich for sikli

example.py
multiplication = []

for i in range(2, 5):
    row = []
    for j in range(1, 6):
        row.append(i * j)
    multiplication.append(row)

print(multiplication)

Bu yerda, ichma-ich for sikli ichma-ich list comprehension bilan bir xil natijani hosil qiladi. Ko'rishimiz mumkinki, list comprehension bilan yozilgan kod ancha toza va ixcham.

List Comprehension va Lambda funksiyalari

List comprehension bilan bir qatorda, biz ro'yxatlar bilan ishlash uchun lambda funksiyalaridan ham foydalanamiz.

List comprehension odatda ro'yxatni ba'zi shartlarga asoslanib filtrlash uchun ishlatilsa, lambda funksiyalari odatda map() va filter() kabi funksiyalar bilan birga ishlatiladi.

Ular murakkab amallar uchun yoki anonim funksiya talab qilinganda ishlatiladi.

Keling, bir misolni ko'ramiz.

example.py
numbers = [5, 6, 7, 8, 9]

# lambda funksiyasi yordamida yangi ro'yxat yaratish
square_numbers = list(map(lambda num : num**2 , numbers))

print(square_numbers)

Natija

kod
[25, 36, 49, 64, 81]

Xuddi shu natijaga list comprehension yordamida ham erishishimiz mumkin:

example.py
# list comprehension yordamida yangi ro'yxat yaratish
square_numbers = [num ** 2 for num in numbers]

Agar ikkala kodni solishtirsak, list comprehension to'g'ridan-to'g'ri va o'qish hamda tushunish osonroq.

Shuning uchun, murakkab amallarni bajarishimiz kerak bo'lmasa, list comprehension'ga sodiq qolishimiz mumkin.

Pythonda lambda funksiyalarining ishlatilishi haqida ko'proq bilish uchun, Python Lambda/Function sahifasiga tashrif buyuring.

QBilimingizni sinab ko'ring
1 / 3

1. List comprehension'ning asosiy afzalligi nima?