القائمة الرئيسية

الصفحات

دورة البرمجة بلغة بايثون - الدرس الخامس والعشرون (التبل Tuple)

دورة البرمجة بلغة بايثون - الدرس الخامس والعشرون (التبل Tuple)

 دورة البرمجة بلغة بايثون - الدرس الخامس والعشرون (التبل Tuple)

في هذه المقالة ، ستتعلم كل شيء عن التبل في بايثون. بشكل أكثر تحديدًا ، ما هي ، وكيفية إنشائها ، ومتى تستخدمها والطرق المختلفة التي يجب أن تكون على دراية بها.


يشبه tuple في بايثون القوائم. الفرق بين الاثنين هو أنه لا يمكننا تغيير عناصر التبل بمجرد تعيينها بينما يمكننا تغيير عناصر القائمة.


إنشاء Tuple

يتم إنشاء المجموعة بوضع كل العناصر داخل أقواس () ، مفصولة بفواصل. الأقواس اختيارية ، ومع ذلك ، فمن الجيد استخدامها.


يمكن أن تحتوي المجموعة على أي عدد من العناصر وقد تكون من أنواع مختلفة (عدد صحيح ، عدد عشري ، قائمة ، سلسلة ، إلخ).

# Different types of tuples

# Empty tuple
my_tuple = ()
print(my_tuple)

# Tuple having integers
my_tuple = (1, 2, 3)
print(my_tuple)

# tuple with mixed datatypes
my_tuple = (1, "Hello", 3.4)
print(my_tuple)

# nested tuple
my_tuple = ("mouse", [8, 4, 6], (1, 2, 3))
print(my_tuple)

الناتج()

(1, 2, 3)
(1, 'Hello', 3.4)
('mouse', [8, 4, 6], (1, 2, 3))


يمكن أيضًا إنشاء مجموعة بدون استخدام الأقواس. يُعرف هذا باسم التعبئة tuple.

my_tuple = 3, 4.6, "dog"
print(my_tuple)

# tuple unpacking is also possible
a, b, c = my_tuple

print(a)      # 3
print(b)      # 4.6
print(c)      # dog

الناتج

(3, 4.6, 'dog')
3
4.6
dog

يعد إنشاء تبل بعنصر واحد أمرًا صعبًا بعض الشيء.


لا يكفي وجود عنصر واحد بين قوسين. سنحتاج إلى فاصلة لاحقة للإشارة إلى أنها ، في الواقع ، من نوع تبل.

my_tuple = ("hello")
print(type(my_tuple))  # <class 'str'>

# Creating a tuple having one element
my_tuple = ("hello",)
print(type(my_tuple))  # <class 'tuple'>

# Parentheses is optional
my_tuple = "hello",
print(type(my_tuple))  # <class 'tuple'>


الناتج

<class 'str'>
<class 'tuple'>
<class 'tuple'>

الوصول إلى عناصر Tuple

توجد عدة طرق يمكننا من خلالها الوصول إلى عناصر التبل.


1. الفهرسة

يمكننا استخدام عامل الفهرسة [] للوصول إلى عنصر في tuple ، حيث يبدأ الفهرس من 0.


لذا ، فإن المجموعة التي تحتوي على 6 عناصر ستحتوي على مؤشرات من 0 إلى 5. محاولة الوصول إلى فهرس خارج نطاق فهرس المجموعة (6،7 ، ... في هذا المثال) سيؤدي إلى حدوث خطأ IndexError.


يجب أن يكون الفهرس عددًا صحيحًا ، لذلك لا يمكننا استخدام عدد صحيح أو أنواع أخرى. سيؤدي هذا إلى ظهور خطأ TypeError.


وبالمثل ، يتم الوصول إلى المجموعات المتداخلة باستخدام الفهرسة المتداخلة ، كما هو موضح في المثال أدناه.


# الوصول إلى عناصر tuple باستخدام الفهرسة

# Accessing tuple elements using indexing
my_tuple = ('p','e','r','m','i','t')

print(my_tuple[0])   # 'p' 
print(my_tuple[5])   # 't'

# IndexError: list index out of range
# print(my_tuple[6])

# Index must be an integer
# TypeError: list indices must be integers, not float
# my_tuple[2.0]

# nested tuple
n_tuple = ("mouse", [8, 4, 6], (1, 2, 3))

# nested index
print(n_tuple[0][3])       # 's'
print(n_tuple[1][1])       # 4


الناتج

p
t
s
4

2. الفهرسة السلبية

تسمح بايثون بالفهرسة السلبية لتسلسلاتها.

# Negative indexing for accessing tuple elements
my_tuple = ('p', 'e', 'r', 'm', 'i', 't')

# Output: 't'
print(my_tuple[-1])

# Output: 'p'
print(my_tuple[-6])


الناتج

t
p

3. التقطيع

يمكننا الوصول إلى مجموعة من العناصر في التبل باستخدام نقطتي عامل التشغيل.

# Accessing tuple elements using slicing
my_tuple = ('p','r','o','g','r','a','m','i','z')

# elements 2nd to 4th
# Output: ('r', 'o', 'g')
print(my_tuple[1:4])

# elements beginning to 2nd
# Output: ('p', 'r')
print(my_tuple[:-7])

# elements 8th to end
# Output: ('i', 'z')
print(my_tuple[7:])

# elements beginning to end
# Output: ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')
print(my_tuple[:])

الناتج

('r', 'o', 'g')
('p', 'r')
('i', 'z')
('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')

يمكن تصور التقطيع بشكل أفضل من خلال اعتبار الفهرس بين العناصر كما هو موضح أدناه. لذا إذا أردنا الوصول إلى نطاق ، فنحن بحاجة إلى الفهرس الذي سيقطع الجزء من التبل.


عنصر تشريح في بايثون



تغيير Tuple

على عكس القوائم ، فإن التبل غير قابلة للتغيير.


هذا يعني أنه لا يمكن تغيير عناصر التبل بمجرد تخصيصها. ولكن ، إذا كان العنصر هو نفسه نوع بيانات قابل للتغيير مثل القائمة ، فيمكن تغيير عناصره المتداخلة.


يمكننا أيضًا تعيين تبل لقيم مختلفة (إعادة التعيين).

# Changing tuple values
my_tuple = (4, 2, 3, [6, 5])


# TypeError: 'tuple' object does not support item assignment
# my_tuple[1] = 9

# However, item of mutable element can be changed
my_tuple[3][0] = 9    # Output: (4, 2, 3, [9, 5])
print(my_tuple)

# Tuples can be reassigned
my_tuple = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')

# Output: ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')
print(my_tuple)

الناتج

(4, 2, 3, [9, 5])
('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')

يمكننا استخدام عامل + لدمج مجموعتين. وهذا ما يسمى بالتسلسل.


يمكننا أيضًا تكرار العناصر في المجموعة لعدد معين من المرات باستخدام عامل التشغيل *.


تؤدي كلتا العمليتين + و * إلى بنية tuple جديدة.

# Concatenation
# Output: (1, 2, 3, 4, 5, 6)
print((1, 2, 3) + (4, 5, 6))

# Repeat
# Output: ('Repeat', 'Repeat', 'Repeat')
print(("Repeat",) * 3)

الناتج

(1, 2, 3, 4, 5, 6)
('Repeat', 'Repeat', 'Repeat')

حذف Tuple

كما تمت مناقشته أعلاه ، لا يمكننا تغيير العناصر في tuple. هذا يعني أنه لا يمكننا حذف أو إزالة عناصر من tuple.


ومع ذلك ، يمكن حذف tuple بالكامل باستخدام الكلمة الأساسية del.

# Deleting tuples
my_tuple = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')

# can't delete items
# TypeError: 'tuple' object doesn't support item deletion
# del my_tuple[3]

# Can delete an entire tuple
del my_tuple

# NameError: name 'my_tuple' is not defined
print(my_tuple)

الناتج

Traceback (most recent call last):
  File "<string>", line 12, in <module>
NameError: name 'my_tuple' is not defined

دوال Tuple

الدوال التي تضيف العناصر أو تزيلها غير متوفرة مع tuple. تتوفر الطريقتان التاليتان فقط.


بعض الأمثلة على دوال تبل:

my_tuple = ('a', 'p', 'p', 'l', 'e',)

print(my_tuple.count('p'))  # Output: 2
print(my_tuple.index('l'))  # Output: 3

الناتج

2
3


دوال Tuple أخرى

1. اختبار عضوية Tuple

يمكننا اختبار ما إذا كان العنصر موجودًا في tuple أم لا ، باستخدام الكلمة الأساسية in.

# Membership test in tuple
my_tuple = ('a', 'p', 'p', 'l', 'e',)

# In operation
print('a' in my_tuple)
print('b' in my_tuple)

# Not in operation
print('g' not in my_tuple)

الناتج

True
False
True

2. التكرار من خلال Tuple

يمكننا استخدام حلقة for للتكرار خلال كل عنصر في التبل.

# Using a for loop to iterate through a tuple
for name in ('John', 'Kate'):
    print("Hello", name)

الناتج

Hello John
Hello Kate

مزايا التبل الغير موجودة في القوائم

نظرًا لأن tuple تشبه القوائم تمامًا ، يتم استخدام كلاهما في مواقف مماثلة. ومع ذلك ، هناك مزايا معينة لتطبيق tuple على قائمة. فيما يلي بعض المزايا الرئيسية:

  • نستخدم بشكل عام المجموعات لأنواع البيانات غير المتجانسة (المختلفة) والقوائم لأنواع البيانات المتجانسة (المتشابهة).
  • نظرًا لأن tuple غير قابلة للتغيير ، فإن التكرار عبر tuple يكون أسرع منه مع list. لذلك هناك تحسن طفيف في الأداء.
  • يمكن استخدام التبل التي تحتوي على عناصر غير قابلة للتغيير كمفتاح للقاموس. مع القوائم ، هذا الامر غير ممكن.
  • إذا كانت لديك بيانات لا تتغير ، فإن تنفيذها بصفتها tuple سيضمن أنها تظل محمية ضد الكتابة.

reaction:
Ahmed Taher
Ahmed Taher
مدون من العراق . احب البرمجة وكل ما يتعلق بالشبكات والسيرفرات وامن المعلومات . واسعى الى توفير جميع المصادر والمواد للامتحانات الدولية.

تعليقات