هياكل البيانات
في هذا الدرس سنتعلم أنواع هياكل البيانات الأساسية في Python: القوائم (Lists)، المجموعات الثابتة (Tuples)، المجموعات (Sets)، والقواميس (Dictionaries). سنفهم متى نستخدم كل هيكل وكيف نتعامل معه.
مقدمة عن هياكل البيانات
هياكل البيانات (Data Structures) هي طرق لتنظيم وتخزين البيانات بشكل فعال. في Python، توجد أربع هياكل بيانات أساسية:
- Lists: مرتبة، قابلة للتعديل، تقبل التكرار
- Tuples: مرتبة، غير قابلة للتعديل، تقبل التكرار
- Sets: غير مرتبة، قابلة للتعديل، لا تقبل التكرار
- Dictionaries: مرتبة (Python 3.7+), قابلة للتعديل، مفتاح-قيمة
📋 القوائم (Lists)
القوائم هي هياكل بيانات مرتبة وقابلة للتعديل. يمكن أن تحتوي على أنواع بيانات مختلفة.
1️⃣ إنشاء القوائم
# Creating a shopping list
shopping_list = ["Milk", "Bread", "Eggs", "Cheese"]
print(shopping_list)
# Accessing elements
print("First item:", shopping_list[0])
print("Last item:", shopping_list[-1])
# List comprehension for creating lists
shopping_list = ["Milk", "Bread", "Eggs", "Cheese"]
print(f"First: {shopping_list[0]}, Last: {shopping_list[-1]}")
2️⃣ عمليات القوائم
fruits = ["Apple", "Banana"]
# Add element to end
fruits.append("Orange")
# Insert at specific position
fruits.insert(1, "Mango")
# Remove element
fruits.remove("Banana")
# Remove by index
removed = fruits.pop(0)
print("Fruits:", fruits)
print("Removed:", removed)
fruits = ["Apple", "Banana"]
fruits.append("Orange")
fruits.insert(1, "Mango")
removed = fruits.pop(fruits.index("Banana"))
print(f"Fruits: {fruits}, Removed: {removed}")
.append() للإضافة في النهاية، و .insert() للإضافة في موقع محدد.
📦 المجموعات الثابتة (Tuples)
المجموعات الثابتة هي هياكل بيانات مرتبة ولكن غير قابلة للتعديل. تستخدم عندما تريد بيانات ثابتة لا تتغير.
1️⃣ إنشاء Tuples
# GPS coordinates (latitude, longitude)
coordinates = (25.276987, 55.296249)
print("Dubai coordinates:", coordinates)
# Access elements
latitude = coordinates[0]
longitude = coordinates[1]
print("Latitude:", latitude)
print("Longitude:", longitude)
# Tuple unpacking
coordinates = (25.276987, 55.296249)
latitude, longitude = coordinates
print(f"Dubai: ({latitude}, {longitude})")
2️⃣ Tuple Unpacking
student = ("Ahmed", 20, "Computer Science")
# Traditional way
name = student[0]
age = student[1]
major = student[2]
print("Name:", name)
print("Age:", age)
print("Major:", major)
# Pythonic way - Unpacking
student = ("Ahmed", 20, "Computer Science")
name, age, major = student
print(f"{name}, {age}, {major}")
TypeError.
🔢 المجموعات (Sets)
المجموعات هي هياكل بيانات غير مرتبة ولا تقبل التكرار. مثالية لإزالة العناصر المكررة وإجراء العمليات الرياضية.
1️⃣ إنشاء Sets
# Remove duplicates from a list
numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = set(numbers)
print("Original:", numbers)
print("Unique:", unique_numbers)
# Set comprehension
numbers = [1, 2, 2, 3, 4, 4, 5]
unique = set(numbers)
print(f"Original: {numbers} → Unique: {unique}")
2️⃣ عمليات Sets الرياضية
group_a = {1, 2, 3, 4}
group_b = {3, 4, 5, 6}
# Union (اتحاد)
union = group_a.union(group_b)
print("Union:", union)
# Intersection (تقاطع)
intersection = group_a.intersection(group_b)
print("Intersection:", intersection)
# Difference (فرق)
difference = group_a.difference(group_b)
print("Difference:", difference)
group_a = {1, 2, 3, 4}
group_b = {3, 4, 5, 6}
print(f"Union: {group_a | group_b}")
print(f"Intersection: {group_a & group_b}")
print(f"Difference: {group_a - group_b}")
📊 جدول المقارنة
| الهيكل | مرتب؟ | قابل للتعديل؟ | يقبل التكرار؟ | الاستخدام الأمثل |
|---|---|---|---|---|
| List | ✅ نعم | ✅ نعم | ✅ نعم | قوائم قابلة للتعديل |
| Tuple | ✅ نعم | ❌ لا | ✅ نعم | بيانات ثابتة (إحداثيات، تواريخ) |
| Set | ❌ لا | ✅ نعم | ❌ لا | إزالة التكرار، عمليات رياضية |
| Dictionary | ✅ نعم (3.7+) | ✅ نعم | ❌ لا (للمفاتيح) | تخزين بيانات مفتاح-قيمة |
📖 القواميس (Dictionaries)
القواميس تخزن البيانات في أزواج مفتاح-قيمة (Key-Value Pairs). المفتاح يجب أن يكون فريداً.
1️⃣ إنشاء Dictionaries
# Student information
student = {
"name": "Ali",
"age": 20,
"major": "Computer Science",
"gpa": 3.8
}
print("Name:", student["name"])
print("Age:", student["age"])
print("GPA:", student["gpa"])
student = {"name": "Ali", "age": 20, "major": "CS", "gpa": 3.8}
print(f"{student['name']}, {student['age']}, GPA: {student['gpa']}")
2️⃣ عمليات Dictionaries
student = {"name": "Sara", "age": 22}
# Add new key-value pair
student["city"] = "Cairo"
# Update existing value
student["age"] = 23
# Remove key-value pair
removed_value = student.pop("city")
print("Student:", student)
print("Removed:", removed_value)
student = {"name": "Sara", "age": 22}
student.update({"city": "Cairo", "age": 23})
removed = student.pop("city", "Not Found")
print(f"Student: {student}, Removed: {removed}")
.get(key, default) بدلاً من [key] لتجنب الأخطاء عند البحث عن مفاتيح غير موجودة.
🔗 الهياكل المتداخلة (Nested Structures)
يمكن دمج هياكل البيانات داخل بعضها البعض لإنشاء بنى معقدة.
# List of dictionaries
students = [
{"name": "Ali", "age": 20, "grades": [85, 90, 88]},
{"name": "Sara", "age": 22, "grades": [92, 88, 95]}
]
# Access nested data
print("First student name:", students[0]["name"])
print("First grade of Ali:", students[0]["grades"][0])
# Iterate over nested structure
for student in students:
print("Name:", student["name"])
print("Average:", sum(student["grades"]) / len(student["grades"]))
students = [
{"name": "Ali", "age": 20, "grades": [85, 90, 88]},
{"name": "Sara", "age": 22, "grades": [92, 88, 95]}
]
for s in students:
avg = sum(s["grades"]) / len(s["grades"])
print(f"{s['name']}: {avg:.1f}")