იტერატორები და კონტეინერები Python-ში¶
შესავალი¶
კონტეინერები არის ობიექტები, რომლებიც შეიცავენ სხვა ობიექტებს (მონაცემებს). იტერატორები კი საშუალებას გვაძლევენ ამ მონაცემებზე თანმიმდევრულად წვდომისთვის.
1. კონტეინერები (Containers)¶
რა არის კონტეინერი?¶
კონტეინერი არის ობიექტი, რომელიც ინახავს მონაცემთა კოლექციას. Python-ში ძირითადი კონტეინერებია:
- List (სია) - შეცვლადი, დალაგებული
- Tuple (tuple) - შეუცვლელი, დალაგებული
- Set (სიმრავლე) - შეცვლადი, დაულაგებელი, უნიკალური ელემენტები
- Dictionary (ლექსიკონი) - გასაღები-მნიშვნელობის წყვილები
მაგალითები¶
# List - სია
fruits = ['vashli', 'banani', 'atami', 'qurdzeni']
print(fruits[0]) # vashli
# Tuple
coordinates = (10, 20)
# coordinates[0] = 15 # შეცდომა! Tuple შეუცვლელია
# Set - უნიკალური ელემენტები
numbers = {1, 2, 3, 3, 4, 5, 5}
print(numbers) # {1, 2, 3, 4, 5}
# Dictionary
student = {
'name': 'Giorgi',
'age': 20,
'faculty': 'Informatika'
}
print(student['name']) # Giorgi
პრაქტიკული მაგალითი: შეფასებების სისტემა¶
# სტუდენტების შეფასებები
grades = {
'matematika': [85, 90, 78, 92],
'fizika': [88, 76, 95, 89],
'programireba': [95, 98, 91, 94]
}
# საშუალო შეფასების გამოთვლა
for subject, scores in grades.items():
average = sum(scores) / len(scores)
print(f"{subject}: sashualo {average:.1f}")
2. იტერაცია (Iteration)¶
რა არის იტერაცია?¶
იტერაცია არის პროცესი, როდესაც კონტეინერის ელემენტებს ერთ-ერთად გადავუყვებით.
for ციკლი - ძირითადი იტერაცია¶
# სიის იტერაცია
colors = ['witeli', 'lurji', 'mwvane', 'qviteli']
for color in colors:
print(f"feri: {color}")
enumerate() - ინდექსით იტერაცია¶
# ინდექსების ჩვენება
words = ['gamarjoba', 'samqaro', 'Python', 'magaria']
for index, word in enumerate(words):
print(f"{index + 1}. {word}")
# გამოტანა:
# 1. gamarjoba
# 2. samqaro
# 3. Python
# 4. magaria
zip() - რამდენიმე სიის პარალელური იტერაცია¶
# ორი სიის გაერთიანება
names = ['Nino', 'Dato', 'Mariam']
scores = [95, 87, 92]
for name, score in zip(names, scores):
print(f"{name}: {score} qula")
3. იტერატორები (Iterators)¶
რა არის იტერატორი?¶
იტერატორი არის ობიექტი, რომელსაც შეუძლია თავისი ელემენტები ერთი-ერთის მიყოლებით დააბრუნოს.
iter() და next()¶
# სიის იტერატორის შექმნა
numbers = [1, 2, 3, 4, 5]
iterator = iter(numbers)
# ელემენტების ერთ-ერთის მიღება
print(next(iterator)) # 1
print(next(iterator)) # 2
print(next(iterator)) # 3
პრაქტიკული მაგალითი: ფაილის წაკითხვა¶
# ფაილის თითოეული ხაზი არის იტერატორი
# (მაგალითია - რეალურ ფაილზე ასე მუშაობთ)
# with open('teksti.txt', 'r', encoding='utf-8') as file:
# for line in file:
# print(line.strip())
# სიმულაცია:
lines = ['pirveli xazi', 'meore xazi', 'mesame xazi']
for line in lines:
print(line)
4. range() - რიცხვების გენერატორი¶
range() გამოყენება¶
# 0-დან 5-მდე (5 არ შედის)
for i in range(5):
print(i, end=' ') # 0 1 2 3 4
print()
# 1-დან 10-მდე
for i in range(1, 11):
print(i, end=' ') # 1 2 3 4 5 6 7 8 9 10
print()
# ნაბიჯით 2
for i in range(0, 11, 2):
print(i, end=' ') # 0 2 4 6 8 10
პრაქტიკული მაგალითი: გამრავლების ტაბულა¶
# 7-ის გამრავლების ტაბულა
number = 7
print(f"gamravlebis tabula {number}-istvis:")
for i in range(1, 11):
product = number * i
print(f"{number} × {i} = {product}")
5. List Comprehension - სიის შექმნა ერთ ხაზში¶
ძირითადი სინტაქსი¶
# ჩვეულებრივი მეთოდი
squares = []
for x in range(10):
squares.append(x ** 2)
# List Comprehension - მოკლე და ელეგანტური
squares = [x ** 2 for x in range(10)]
print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
პირობით (if)¶
# მხოლოდ ლუწი რიცხვები
even_numbers = [x for x in range(20) if x % 2 == 0]
print(even_numbers) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
# სიტყვები, რომლებიც იწყება 'გ'-თი
words = ['Giorgi', 'Mariam', 'Giga', 'Nino', 'Gvanca']
g_words = [word for word in words if word.startswith('G')]
print(g_words) # ['Giorgi', 'Giga', 'Gvanca']
დიქშენერისთვის (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}
6. პრაქტიკული ამოცანები¶
ამოცანა 1: საშუალო ტემპერატურა¶
# კვირის ტემპერატურები
temperatures = [23, 25, 22, 24, 26, 27, 25]
days = ['orshabati', 'samshabati', 'otxshabati', 'xutshabati',
'paraskevi', 'shabati', 'kvira']
# თითოეული დღის ტემპერატურა
for day, temp in zip(days, temperatures):
print(f"{day}: {temp}°C")
# საშუალო ტემპერატურა
average = sum(temperatures) / len(temperatures)
print(f"\nsashualo temperatura: {average:.1f}°C")
# ცხელი დღეები (25°C-ზე მეტი)
hot_days = [day for day, temp in zip(days, temperatures) if temp > 25]
print(f"cxeli dgeebi: {', '.join(hot_days)}")
ამოცანა 2: პროდუქტების მენეჯმენტი¶
# პროდუქტების კატალოგი
products = [
{'name': 'Laptopi', 'price': 1200, 'quantity': 5},
{'name': 'Mausi', 'price': 25, 'quantity': 50},
{'name': 'Klaviatura', 'price': 75, 'quantity': 30},
{'name': 'Monitori', 'price': 300, 'quantity': 15},
]
# ყველა პროდუქტის ჩვენება
print("produqtebis sia:")
print("-" * 50)
for i, prod in enumerate(products, 1):
print(f"{i}. {prod['name']:15} - {prod['price']:>6}₾ "
f"(maragshi: {prod['quantity']})")
# მთლიანი ღირებულება
total = sum(p['price'] * p['quantity'] for p in products)
print(f"\nmtliani maragis ghirebuleba: {total}₾")
# ძვირი პროდუქტები (100₾-ზე მეტი)
expensive = [p['name'] for p in products if p['price'] > 100]
print(f"dzviri produqtebi: {', '.join(expensive)}")
ამოცანა 3: სტუდენტების რეიტინგი¶
# სტუდენტების შეფასებები
students = {
'Giorgi': [85, 90, 88, 92],
'Mariam': [95, 93, 97, 96],
'Dato': [78, 82, 80, 85],
'Nino': [88, 91, 89, 93]
}
# საშუალო ქულების გამოთვლა
averages = {}
for name, scores in students.items():
avg = sum(scores) / len(scores)
averages[name] = avg
# დალაგება საშუალო ქულის მიხედვით
sorted_students = sorted(averages.items(), key=lambda x: x[1], reverse=True)
print("studentebis reitingi:")
print("=" * 40)
for position, (name, score) in enumerate(sorted_students, 1):
print(f"{position}. {name:10} - sashualo: {score:.2f}")
7. სავარჯიშოები თქვენთვის¶
სავარჯიშო 1: ლუწ-კენტი¶
შექმენით პროგრამა, რომელიც 1-დან 50-მდე რიცხვებს ორ სიაში გაყოფს: ლუწები და კენტები.
# თქვენი კოდი აქ
even = []
odd = []
for num in range(1, 51):
if num % 2 == 0:
even.append(num)
else:
odd.append(num)
print(f"Luwebi: {even}")
print(f"Kentebi: {odd}")
სავარჯიშო 2: წიგნების ბიბლიოთეკა¶
შექმენით წიგნების სია (dictionary-ებით), სადაც თითოეულ წიგნს ექნება სათაური, ავტორი და გვერდების რაოდენობა. იპოვეთ: - ყველაზე გრძელი წიგნი - წიგნები კონკრეტული ავტორის - წიგნების საშუალო სიგრძე
# თქვენი კოდი აქ
books = [
{'title': 'Vefxistyaosani', 'author': 'Rustaveli', 'pages': 350},
{'title': 'Didostatis Marjvena', 'author': 'Javaxishvili', 'pages': 520},
{'title': 'Qaji Baia', 'author': 'Kazbegi', 'pages': 180}
]
# ყველაზე გრძელი წიგნი
longest = max(books, key=lambda b: b['pages'])
print(f"Qvelaze grdzeli: {longest['title']} - {longest['pages']} gverdi")
# საშუალო სიგრძე
avg_pages = sum(b['pages'] for b in books) / len(books)
print(f"Sashualo sigrdze: {avg_pages:.0f} gverdi")
სავარჯიშო 3: სავაჭრო კალათა¶
შექმენით სავაჭრო კალათის სიმულაცია: - დაამატეთ პროდუქტები კალათაში - გამოთვალეთ მთლიანი ფასი - გამოიყენეთ 10% ფასდაკლება 100₾-ზე მეტი შესყიდვისთვის
# თქვენი კოდი აქ
cart = []
cart.append({'name': 'Puri', 'price': 2})
cart.append({'name': 'Rdzis', 'price': 5})
cart.append({'name': 'Qveli', 'price': 3})
total = sum(item['price'] for item in cart)
print(f"Jamuri: {total}₾")
if total > 100:
discount = total * 0.1
final_price = total - discount
print(f"Fasdakleba: {discount}₾")
print(f"Gadasaxdeli: {final_price}₾")
else:
print(f"Gadasaxdeli: {total}₾")
8. სასარგებლო რჩევები¶
-
for vs while: გამოიყენეთ
forროდესაც იცით რამდენჯერ უნდა შეასრულოთ ციკლი,while- როდესაც პირობაზე არის დამოკიდებული. -
List Comprehension: გამოიყენეთ მარტივი ოპერაციებისთვის, რთული ლოგიკისთვის ჩვეულებრივი
forციკლი უფრო გასაგებია. -
enumerate(): როდესაც გჭირდებათ და ინდექსი და ელემენტი.
-
zip(): რამდენიმე სიის პარალელურად დამუშავებისთვის.
-
break და continue:
break- ციკლის შეჩერებაcontinue- მიმდინარე იტერაციის გამოტოვება
# break მაგალითი
for i in range(10):
if i == 5:
break
print(i) # დაბეჭდავს: 0, 1, 2, 3, 4
# continue მაგალითი
for i in range(5):
if i == 2:
continue
print(i) # დაბეჭდავს: 0, 1, 3, 4
დასკვნა¶
იტერატორები და კონტეინერები Python-ის ძირითადი კომპონენტებია. მათი კარგად ცოდნა გეხმარებათ: - ეფექტურად იმუშაოთ მონაცემებთან - დაწეროთ უფრო კომპაქტური და გასაგები კოდი - გამოიყენოთ Python-ის ძლიერი შესაძლებლობები
გახსოვდეთ: პრაქტიკა სრულყოფს! სცადეთ სხვადასხვა მაგალითები და შექმენით საკუთარი პროგრამები. 🚀