Python List Comprehensions. Keng Qamrovli Qo'llanma

List Comprehension Python dasturlash tilining kuchli va ifodali xususiyatlaridan biridir. U ro'yxatlarni yaratish va qayta ishlashning qisqa va samarali usulini taqdim etadi.

So'nggi yangilanish: 2024-12-20

List Comprehension Python dasturlash tilining kuchli va ifodali xususiyatlaridan biridir. U ro'yxatlarni yaratish va qayta ishlashning qisqa va samarali usulini taqdim etadi. Bu qo'llanma List Comprehension'ning barcha jihatlarini chuqur o'rganishga bag'ishlangan.

Asosiy Tuzilish

List Comprehension'ning asosiy tuzilishi quyidagicha:

[expression for item in iterable if condition]

Bu yerda:

  • expression: har bir element uchun bajariladi
  • item: iteratsiya qilinadigan har bir element
  • iterable: ketma-ketlik (masalan, ro'yxat, to'plam)
  • if condition: ixtiyoriy, elementlarni filtrlash uchun

Oddiy Misollar

Keling, ba'zi oddiy misollarni ko'rib chiqaylik:

# 1-10 gacha bo'lgan sonlarning kvadratlarini hisoblash
squares = [x**2 for x in range(1, 11)]
print(squares)  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# Satrlar ro'yxatidagi har bir so'zni katta harflarga o'zgartirish
words = ['hello', 'world', 'python']
upper_words = [word.upper() for word in words]
print(upper_words)  # ['HELLO', 'WORLD', 'PYTHON']

# Fayldan o'qilgan satrlarni tozalash
with open('example.txt', 'r') as file:
    lines = [line.strip() for line in file]
print(lines)

Shartli List Comprehensions

Siz List Comprehension'ga shartlar qo'shishingiz mumkin:

# Faqat juft sonlarning kvadratlarini hisoblash
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares)  # [4, 16, 36, 64, 100]

# 5 harfdan uzun so'zlarni tanlash
words = ['apple', 'banana', 'cherry', 'date', 'elderberry']
long_words = [word for word in words if len(word) > 5]
print(long_words)  # ['banana', 'cherry', 'elderberry']

Ichma-ich List Comprehensions

Murakkab tuzilmalar uchun ichma-ich List Comprehension'lardan foydalanish mumkin:

# 3x3 matritsani tekislash
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

# Koordinatalar juftligini yaratish
coords = [(x, y) for x in range(3) for y in range(3)]
print(coords)  # [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

List Comprehensions va Funksiyalar

List Comprehension'lar funksiyalar bilan birgalikda ishlatilishi mumkin:

# Sonlarni juft yoki toqligini aniqlash
def is_even(n):
    return 'juft' if n % 2 == 0 else 'toq'

numbers = [1, 2, 3, 4, 5]
result = [is_even(n) for n in numbers]
print(result)  # ['toq', 'juft', 'toq', 'juft', 'toq']

# Lambda funksiyalar bilan ishlatish
squares = [(lambda x: x**2)(x) for x in range(1, 6)]
print(squares)  # [1, 4, 9, 16, 25]

Set va Dictionary Comprehensions

List Comprehension'ga o'xshash tuzilishlar to'plamlar va lug'atlar uchun ham mavjud:

# Set Comprehension
squares_set = {x**2 for x in range(1, 6)}
print(squares_set)  # {1, 4, 9, 16, 25}

# Dictionary Comprehension
squares_dict = {x: x**2 for x in range(1, 6)}
print(squares_dict)  # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

Generator Expressions

Generator Expression'lar List Comprehension'ga o'xshaydi, lekin xotirada kamroq joy egallaydi:

# Generator Expression
gen = (x**2 for x in range(1, 6))
print(gen)  # <generator object <genexpr> at 0x...>
print(list(gen))  # [1, 4, 9, 16, 25]

Ishlash Samaradorligi

List Comprehension odatda an'anaviy for tsiklidan tezroq ishlaydi:

import timeit

# An'anaviy for tsikli
def for_loop():
    result = []
    for i in range(1000):
        result.append(i**2)
    return result

# List Comprehension
def list_comp():
    return [i**2 for i in range(1000)]

print("For tsikli vaqti:", timeit.timeit(for_loop, number=1000))
print("List Comprehension vaqti:", timeit.timeit(list_comp, number=1000))

Eng Yaxshi Amaliyotlar

  1. List Comprehension'ni oddiy va tushunarli holatlarda ishlating.
  2. Murakkab mantiq uchun oddiy for tsikllaridan foydalaning.
  3. Uzun va murakkab List Comprehension'lardan qoching.
  4. Katta ma'lumotlar to'plamlari uchun Generator Expression'larni ko'rib chiqing.
  5. O'qilishi va tushunarli bo'lishiga e'tibor bering.

Umumiy Xatolar va Ularning Yechimlari

  1. Xato: Juda uzun va murakkab List Comprehension'lar. Yechim: Kodni bir necha qatorga bo'ling yoki oddiy for tsiklidan foydalaning.
  2. Xato: Noto'g'ri joylashtirilgan shartlar. Yechim: Shartlarning to'g'ri joylashishiga e'tibor bering.
  3. Xato: Xotiradan haddan tashqari foydalanish. Yechim: Katta ma'lumotlar to'plamlari uchun Generator Expression'lardan foydalaning.

Ilg'or Usullar

  1. Ko'p o'lchovli List Comprehension:
matrix = [[(i, j) for j in range(3)] for i in range(3)]
print(matrix)  # [[(0, 0), (0, 1), (0, 2)], [(1, 0), (1, 1), (1, 2)], [(2, 0), (2, 1), (2, 2)]]
  1. Rekursiv List Comprehension:
def flatten(lst):
    return [item for sublist in lst for item in (flatten(sublist) if isinstance(sublist, list) else [sublist])]

nested = [1, [2, 3, [4, 5]], 6, [7, 8]]
print(flatten(nested))  # [1, 2, 3, 4, 5, 6, 7, 8]
  1. Funksional dasturlash bilan birgalikda ishlatish:
from functools import reduce

numbers = [1, 2, 3, 4, 5]
sum_of_squares = reduce(lambda x, y: x + y, [n**2 for n in numbers])
print(sum_of_squares)  # 55

Xulosa

List Comprehension Python'ning eng kuchli va foydali xususiyatlaridan biridir. U kodingizni qisqartirish, o'qilishini yaxshilash va ba'zi hollarda ishlash samaradorligini oshirish imkonini beradi. Biroq, uni to'g'ri va o'rinli ishlatish muhimdir. Ushbu qo'llanmada keltirilgan tamoyillar va misollarni amalda qo'llash orqali, siz List Comprehension'ning to'liq kuchidan foydalanishingiz va yanada samarali Python dasturlarini yaratishingiz mumkin.