python 101 التعامل مع القوائم والسلاسل النصية في لغة بايثون


عبدالهادي الديوري

بعد أن تعرّفنا في الدّرس السّابق على طريقة التّعامل مع البيانات مثل المُتغيّرات وأنواعها كالأرقام وإسناد القيم، سنكمل في هذا الدّرس الثّالث مشوار تعلّم هذه اللغة بتعلّم كيفيّة التّعامل مع كل من القوائم والسّلاسل النّصيّة. 

python-lists-strings.thumb.png.4f897b1b0

تذكير: الشيفرات التّي تكون مسبوقة بعلامة "<<<" يجب أن تُنفّذ على مُفسّر بايثون.

القوائم

تعتبر القوائم طريقة رائعة للتّعامل مع البيانات في لغة بايثون، وتتعلّق القائمة بمتغيّر معيّن بحيث يحمل أكثر من قيمة، ويمكن الوصول إلى هذه القيم باستعمال رقم كل قيمة.

لتفهم أكثر، اعتبر أنّ لك 5 أبناء، بحيث تكون قائمة الأبناء:

  • 0، عمر
  • 1، خالد
  • 2، حسن
  • 3، زيد
  • 4، يوسف

في بايثون، ننشئ القائمة بالطّريقة التاليّة:

>>> children = ['Omar','Khaled','Hassan','Zaid','Youssef']

لنسمّي القائمة أعلاه باسم children، وتحتوي على خمس عناصر، ولكل عنصر رقم خاص به، بحيث يبدأ العدّ من الصّفر، فمثلا إذا أردنا مناداة الابن "عمر" فسيتوجّب علينا مناداته برقمه (أي الرقم 0)، وطريقة مناداة باقي الأبناء تكون بالشّكل التّالي:

>>> print 'Come here ' + children[0] 
Come here Omar 
>>> print 'Come here ' + children[1] 
Come here Khaled 
>>> print 'Come here ' + children[2] 
Come here Hassan 
>>> print 'Come here ' + children[3] 
Come here Zaid 
>>> print 'Come here ' + children[4] 
Come here Youssef

الآن، لننتقل إلى تطبيق مبادئ القوائم على بايثون، يُمكننا إسناد قائمة إلى متغيّر كالتّالي:

>>> x = [1, 2, 3]

ويُمكنك إنشاء قائمة سلاسل نصيّة عوضا عن الأرقام:

>>> x = ["hello", "world"]

يُمكن أن تجمع بين أنواع القيّم المُختلفة، هذا المثال يجمع بين الأرقام والسّلاسل النّصيّة:

>>> x = [1, 2, "hello, "world"]

ويُمكن أن تحتوي القائمة على قائمة أخرى:

>>> x = [1, 2, "hello, "world", ["another", "list"]]

أو بالطّريقة التّاليّة:

>>> a = [1, 2] 
>>> b = [1.5, 2, a] 
>>> b 
[1.5, 2, [1, 2]]

يُمكن أن نستخدم الدّالة len المعرّفة مُسبقا لنقيس طول قائمة ما (عدد مكونات القائمة):

>>> x = [1, 2, 3] 
>>> len(x) 
3

نصل إلى عناصر قائمة ما بكتابة اسم المُتغيّر الذي يحمل القائمة، ثمّ رقم العنصر بين رمزي []:

>>> x = [1, 2, 3] 
>>> x[1] 
2 
>>> x[1] = 4 
>>> x[1] 
4

مع ملاحظة أنّ التّرقيم يبدأ بالصّفر، بحيث يكون العنصر الأوّل من القائمة يحمل الرّقم 0 والعنصر الثّاني يحمل رقم 1 وهكذا دواليك.

يُمكن إنشاء قائمة تحتوي على أعداد صحيحة من مجال معيّن بالدّالة Range، في المثال التّالي قُمنا بإنشاء قائمة تحتوي على أربعة عناصر من 0 إلى 3، ثمّ قائمة تحتوي على ثلاثة عناصر بين العددين 3 و 6، ثمّ في السّطر الأخير قُمنا بإنشاء قائمة مُتكوّنة من 3 عناصر بين العددين 2 و 10 مع زيادة بقيمة 3 :

>>> range(4) 
[0, 1, 2, 3] 
>>> range(3, 6) 
[3, 4, 5] 
>>> range(2, 10, 3) 
[2, 5, 8]

يُمكن كذلك استخدام الدّالة len لحساب عدد عناصر قائمة ما:

>>> a = [1, 2, 3, 4] 
>>> len(a) 
4

كما يُمكنك التّعامل مع القوائم بالرموز الرّياضيّة * و + لتكرار أو الجمع بين عناصر قائمة ما:

>>> a = [1, 2, 3] 
>>> b = [4, 5] 
>>> a + b 
[1, 2, 3, 4, 5] 
>>> b * 3 
[4, 5, 4, 5, 4, 5]

للوصول إلى عناصر قائمة مُعيّنة نستعين برقم العنصر، مع ملاحظة بأنّ التّرقيم يبدأ من الصّفر إلى ( عدد العناصر-1 ).

>>> x = [1, 2] 
>>> x[0] 
1 
>>> x[1] 
2

إذا استخدمت فهرسا (ترقيما) خاطئا، فسيُرجِع مفسّر بايثون خطأ:

>>> x = [1, 2, 3, 4] 
>>> x[6] 
Traceback (most recent call last): 
  File "<stdin>", line 1, in ? 
IndexError: list index out of range

يُمكنك كذلك استخدام التّرقيم السّلبي للوصول إلى عناصر القائمة من الآخر إلى الأول ( آخر عنصر يحمل القيمة -1 والعنصر الأول يحمل الرقم السّلبي لعدد العناصر):

>>> x = [1, 2, 3, 4] 
>>> x[-1] 
4 
>>> x[-2] 
3 
>>> x[-4] 
1

يُمكننا تشريح قائمة (تقسيمها إلى أجزاء)، بالطّريقة التّاليّة:

>>> x = [1, 2, 3, 4] 
>>> x[0:2] 
[1, 2] 
>>> x[1:4] 
[2, 3, 4]

ويمكن استخدام الأرقام السلبيّة في التّقسيم كذلك:

>>> x[0:-1] 
[1, 2, 3]

إذا تركت مكان الرقم الأول فارغا، فالقيمة الافتراضيّة هي الصّفر، و القيمة الافتراضيّة للشّطر الثاني تكون عدد عناصر القائمة:

>>> x = [1, 2, 3, 4] 
>>> a[:2] 
[1, 2] 
>>> a[2:] 
[3, 4] 
>>> a[:] 
[1, 2, 3, 4]

يُمكن استخدام رقم ثالث لتحديد الخطوة (يعني المقدار الذي نضيفه في العنصر الحالي مقارنة بالعنصر السّابق)، والذي يكون الرّقم واحد افتراضيّا:

>>> x = range(10) 
>>> x 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> x[0:6:2] 
[0, 2, 4]

يُمكننا عكس عناصر القائمة بتحديد -1 كقيمة للزيّادة بالشّكل التّالي:

>>> x = range(10) 
>>> x 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> x[::-1] 
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

يُمكن كذلك تغيير قيم عناصر القائمة بتعيين قيمة أخرى:

>>> x = [1, 2, 3, 4] 
>>> x[1] = 5 
>>> x 
[1, 5, 3, 4]

يُمكن استعمال العامل in للتحقق من تواجد عنصر في القائمة، فإن أرجع القيمة True فهذا يعني أن القيمة موجودة، أما إن أرجع False فهذا يعني بأنّ القيمة غير موجودة في القائمة:

>>> x = [1, 2, 3, 4] 
>>> 2 in x 
True 
>>> 10 in x 
False

يُمكن إضافة قيم أخرى إلى قائمة بدالّة الإلحاق append، في المثال التّالي نلحق (نضيف) القيمة 3 إلى القائمة a:

>>> a = [1, 2] 
>>> a.append(3) 
>>> a 
[1, 2, 3]

السلاسل النصية

السّلاسل النّصيّة أو Strings هي التّقنيّة المُستخدمة لكتابة النّصوص في بايثون، وهي سلاسل من الحروف (والتّي بدورها تُشكل جملا فنصوصا)، فمثلا الكلمة "مرحبا" عبارة عن سلسلة نصيّة تحتوي على 5 عناصر، ويمكن الوصول إلى كلّ عنصر كالآتي:

  • العنصر رقم 0 => م 
  • العنصر رقم 1 => ر 
  • العنصر رقم 2 => ح 
  • العنصر رقم 3 => ب 
  • العنصر رقم 4 => ا

مع ملاحظة أنّ المسافات تُحسَبُ كذلك في السّلاسل النّصيّة فمثلا السّلسلة "مرحبا " تحتوي على 6 عناصر (لاحظ المسافة بعد الألف).

وتكون السلاسل النّصية ضمن علامتي تنصيص مزدوجتين "" أو علامتي تنصيص مُفردتين ''.

>>> x = "hello" 
>>> y = 'world' 
>>> print x, y 
hello world

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

أمّا السّلاسل النّصيّة التي تحتوي على أكثر من سطر، فيُمكن تعيينها لمُتغيّر باستعمال ثلاثة رموز إمّا ''' أو """، انظر المثال التّالي (لكي يعمل بشكل جيّد، من المُفضّل وضعه في ملفّ باسم example1.py وتنفيذه بالأمر python example1.py):

x = """This is a multi-line string 
written in 
three lines.""" 
print x 

y = '''multi-line strings can be written 
using three single quote characters as well. 
The string can contain 'single quotes' or "double quotes" ''' 
print y

في المثال أعلاه قمنا بتعيين سلسلة من ثلاثة أسطر للمُتغيّر x بحيثُ يكون المُخرج عند طباعة المُتغيّر x:

This is a multi-line string written in three lines.

يُمكن كذلك إنشاء سلسلة نصيّة متعدّدة الأسطر بإضافة \n إلى نهاية كلّ سطر، انظر المثال:

>>> x = 'This is a multi-line string\nwritten in\nthree lines.' 
>>> print x

مُخرجات المثال أعلاه:

This is a multi-line string written in three lines.

يُمكن الاستعانة بدّالة المُعرّفة مُسبقا في بايثون لقيّاس عدد أحرف سلسلة نصّية، وهذه الدّالة تُدعى len ويُمكن استخدامها على النّحو التّالي:

>>> len("Abdelhadi") 
9

السّلاسل النّصيّة في بايثون تتصرّف تماما كالقوائم، بحيث تكون السّلسلة بمثابة قائمة تحتوي على عدّة أحرف، ويمكن فهرسة (الوصول إلى عناصر السّلسلة) وتقطيع السّلاسل النّصيّة بتتبع نفس مبدأ القوائم، انظر المثال:

>>> a = "helloworld" 
>>> a[1] 
'e' 
>>> a[-2] 
'l' 
>>> a[1:5] 
"ello" 
>>> a[:5] 
"hello" 
>>> a[5:] 
"world" 
>>> a[-2:] 
'ld' 
>>> a[:-2] 
'hellowor' 
>>> a[::-1] 
'dlrowolleh'

يُمكن استعمال العامل in للتحقق فيما إذا كانت السّلسلة النّصيّة جزءا من سلسلة أخرى، في المثال التّالي نقوم بالتحقق من أنّ كلّا من hell و full و el ضمن hello:

>>> 'hell' in 'hello' 
True 
>>> 'full' in 'hello' 
False 
>>> 'el' in 'hello' 
True

عندما يكون المخرج True (صحيح) فهذا يعني بأنّ السّلسلة الصغيرة جزء من السّلسلة النّصيّة الكبيرة. 

هناك العديد من العمليّات التّي يُمكن تطبيقها على السّلاسل النّصيّة، وسنتعرّف على بعض منها فيما يلي من الأسطر:

  • split: فصل سلسلة نصّية إلى أجزاء يفصل بينها أي رمز (شرط أن يكون في السّلسلة) نقوم بتمريره إلى هذه الدّالة، إذا لم تُحدّد أي فاصل فاستعمل split على فصل السّلسلة النّصيّة اعتمادا على مسافة بيضاء (أي تقسيم الجملة إلى كلمات)، لتفهم أكثر ما الذي أقصده تمعّن في المثال التّالي فبه سيتّضح المقال:
>>> "hello world".split() 
['hello', 'world'] 
>>> "a,b,c".split(',') 
['a', 'b', 'c']
  • join: هذه الدّالة تعكس مفعول split حيث تجمع بين عناصر القائمة وترجعها سلسلة نصّية:
>>> " ".join(['hello', 'world']) 
'hello world' 
>>> ','.join(['a', 'b', 'c']) 
'a,b,c'
  • strip: تقوم بإرجاع سلسلة نصية مع حذف المسافات الزائدة.
>>> ' hello world\n'.strip() 
'hello world'

في المثال أعلاه، يدّل الرّمز \n على "سطر جديد" بحيث يطبع السّطر التّالي سطرين الأول hello والثّاني world:

>>> print 'hello\nworld' 
hello world

يُمكن كذلك تمرير قيمة نصيّة لـstrip بحيث تُرجع الدّالة سلسلة نصيّة بدون القيمة المُمَرّرَةِ، لاحظ بأنّها تحذف فقط العناصر الموجودة في بداية وآخر السّلسلة، انظر المثال (لاحظ بأنّ d لم تُحذف، وذلك لأنّها وسط السّلسلة):

>>> 'abcdefgh'.strip('abdh') 
'cdefg'
  • replace: تقوم باستبدال جزء من السّلسلة أو كامل السّلسلة بقيمة أخرى:
>>> 'Hsoub Academy'.replace('Academy', 'I/O') 
'Hsoub I/O'

تمارين

تمرين 1

ما مُخرجات البرنامج التّالي (اُكتبه في ملفّ باسم exercise1.py ثمّ قم بتنفيذه بالأمر python exercise1.py):

x = [0, 1, [2]] 
x[2][0] = 3 
print x 
x[2].append(4) 
print x 
x[2] = 2 
print x

تمرين 2

كم عدد عناصر القائمة x في المثال التّالي (لا تقم بالأمر يدويّا، بل استعن بما تعلّمته):

x = [1, 2, "hello, "world", ”Hi”, 4, 8, 3, 0, “Abdelhadi”, “Hsoub Academy”]

تمرين 3

أزل القيمة "bad" من السّلسلة التاليّة:

>>> 'python is awesome bad'

ترجمة -وبتصرف- للكتاب Python Practice Book لصاحبه Anand Chitipothu.





تفاعل الأعضاء


السلام عليكم ورحمة الله وبركاته ، مشكور اخوي عبدالهادي على هذه الدورة الجميله والأجمل تركت لنا اسئله

لترى مدى فهمنا في هذه اللغه الجميله وجزاك الله الف خير على هذه الدورة فعلا، قد يحتفى او يموت الأنسان ولاكن

عمله لايموت :)
1- ما مُخرجات البرنامج التّالي (اُكتبه في ملفّ باسم exercise1.py ثمّ قم بتنفيذه بالأمر python exercise1.py):

اقتباس


x = [0, 1, [2]]

x[2][0] = 3

يتم استبدال رقم 2 بـ رقم 3

print x

  الطباعه   [[3],0,1]

x[2].append(4)

هنا تم اضافة رقم 4 في المصفوفه الداخليه يعني جنب اثنان

print x

x[2] = 2

print x

 

الجواب:/ المخرجات

اقتباس

 

[0, 1, [3]]
[0, 1, [3, 4]]

[0, 1, 2]

 

2-كم عدد عناصر القائمة x في المثال التّالي (لا تقم بالأمر يدويّا، بل استعن بما تعلّمته):                                           

اقتباس

 

x = [1, 2, "hello", "world", "Hi", 4, 8, 3, 0, "Abdelhadi", "Hsoub Academy"]

الجواب: عددها 11 تمت الأستعانه بدالةlen


 

 

معلومه بسيطه كان يظهر لي خطآ والخطأ كان في قتباس كلمة hello  كانت هكذا "hello

 

3 - أزل القيمة "bad" من السّلسلة التاليّة:                                                                                                            

اقتباس

'python is awesome bad'

جعلت لهذه النصوص متغير ليصبح هكذا

اقتباس

 

words = "python is awesome bad"

 وتم استخدام دالة الاستبدال وهـي  replace لحذف الكلمه المطلوبه

words.replace('bad', '')

بعد استخدامها طبعة  كلمة words  ولقيت الكلمه المراد حذفها موجوده فأضطريت اعملها كذا

words = words.replace('bad', '')

وعندما طبعة كلمة words  اصبحت هكذا


 

اقتباس

"python is awesome"

 

شارك هذا التعليق


رابط هذا التعليق
شارك على الشبكات الإجتماعية

في التمرين الثالث استخدمت

.strip('pad')

تمّ تعديل بواسطة جورج ميلاد

شارك هذا التعليق


رابط هذا التعليق
شارك على الشبكات الإجتماعية


يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن