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-20List 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 bajariladiitem
: iteratsiya qilinadigan har bir elementiterable
: 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
- List Comprehension'ni oddiy va tushunarli holatlarda ishlating.
- Murakkab mantiq uchun oddiy for tsikllaridan foydalaning.
- Uzun va murakkab List Comprehension'lardan qoching.
- Katta ma'lumotlar to'plamlari uchun Generator Expression'larni ko'rib chiqing.
- O'qilishi va tushunarli bo'lishiga e'tibor bering.
Umumiy Xatolar va Ularning Yechimlari
- Xato: Juda uzun va murakkab List Comprehension'lar. Yechim: Kodni bir necha qatorga bo'ling yoki oddiy for tsiklidan foydalaning.
- Xato: Noto'g'ri joylashtirilgan shartlar. Yechim: Shartlarning to'g'ri joylashishiga e'tibor bering.
- Xato: Xotiradan haddan tashqari foydalanish. Yechim: Katta ma'lumotlar to'plamlari uchun Generator Expression'lardan foydalaning.
Ilg'or Usullar
- 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)]]
- 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]
- 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.