طباعة القوائم في بايثون – 10 نصائح وحيل

تعتبر دالة print() في بايثون دالة مضمنة أساسية، ومن المهم استخدامها جنبًا إلى جنب مع قوائم بايثون.

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

إذا كان لديك بالفعل بعض المعرفة بهياكل بيانات بايثون، فإليك بعض النصائح والحيل حول كيفية طباعة قائمة في بايثون.

10+ طرق لطباعة قائمة في بايثون

طباعة قائمة باستخدام *

لطباعة قائمة باستخدام عامل التشغيل *، يمكنك استخدام الدالة print() على النحو التالي:

print(*list_name)

سيؤدي هذا إلى طباعة عناصر القائمة مفصولة بمسافات، تمامًا كما هو الحال عند استخدام الدالة print() مع عدة وسيطات. على سبيل المثال:

pokemon_list = ['Pikachu', 'Abra', 'Charmander']
print(*pokemon_list)

سيؤدي هذا إلى طباعة:

Pikachu Abra Charmander

يمكنك أيضًا استخدام عامل * لفك ضغط قائمة عند استدعاء دالة تأخذ وسيطات متعددة:

def print_pokemon(pokemon1, pokemon2, pokemon3):
   print(pokemon1)
   print(pokemon2)
   print(pokemon3)
   
print_pokemon(*pokemon_list)

سيؤدي هذا إلى طباعة:

Pikachu
Abra
Charmander

طباعة قائمة في سطر واحد

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

print(item for item in list_name)

للقيام بذلك، يمكنك استخدام تعبير المولد داخل دالة print().

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

فيما يلي مثال لكيفية استخدام تعبير المولد لطباعة قائمة بايثون:

pokemon_list = ['Pikachu', 'Abra', 'Charmander']

سيؤدي هذا إلى طباعة عناصر القائمة مفصولة بمسافات، تمامًا كما هو الحال عندما تستخدم الدالة print() مع وسيطات متعددة:

Pikachu Abra Charmander

يمكنك أيضًا استخدام تعبير المولد لفك ضغط قائمة عند استدعاء دالة تأخذ عدة وسيطات. على سبيل المثال:

def print_pokemon(pokemon1, pokemon2, pokemon3):
   print(pokemon1)
   print(pokemon2)
   print(pokemon3)
 
print_pokemon(*(item for item in pokemon_list))

الناتج:

Pikachu
Abra
Charmander

ضع في اعتبارك أن تعبيرات المولد تُستخدم عادةً عندما تحتاج فقط إلى تكرار القيم مرة واحدة؛ فهي لا تُخزَّن في الذاكرة مثل القوائم. إذا كنت بحاجة إلى الوصول إلى قيم القائمة عدة مرات، فقد يكون من الأكثر كفاءة استخدام فهم القائمة أو تخزين القيم في قائمة.

طباعة قائمة بايثون مع فاصل بين العناصر

لطباعة قائمة تحتوي على فاصل بين عناصر القائمة، يمكنك استخدام فهم القائمة داخل دالة print():

print(*[item + '\n' for item in pokemon_list])

يضمن حرف السطر الجديد \n في نهاية كل عنصر طباعة كل عنصر على سطر منفصل:

Pikachu
 Abra
 Charmander

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

print(*[item + ', ' for item in pokemon_list])

الناتج:

Pikachu,  Abra,  Charmander,

لاحظ أن العنصر الأخير سيحتوي على فاصلة ومسافة بعده، وقد يختلف هذا عما تريده.

طباعة قائمة في بايثون بدون فاصل في النهاية

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

print(*[item + (', ' if i < len(pokemon_list)-1 else '') for i, item in enumerate(pokemon_list)])

الناتج:

Pikachu,  Abra,  Charmander

لطباعة قائمة تحتوي على فاصل بين عناصر القائمة ولكن بدون الفاصل في النهاية، يمكنك أيضًا استخدام الدالة print() مع وسيطة الكلمة الأساسية sep:

print(*pokemon_list, sep=', ')

سيؤدي هذا إلى طباعة العناصر المفصولة بفاصلة ومسافة:

Pikachu, Abra, Charmander

لاحظ أن دالة print() تضيف مسافة تلقائيًا بعد كل عنصر، لذلك لا تحتاج إلى تضمينها في سلسلة الفاصلة.

على غرار ما ذكرته سابقًا، يمكنك استخدام أي سلسلة كفاصل، مثل الشرطة:

print(*pokemon_list, sep='-')

سيؤدي هذا إلى طباعة:

Pikachu-Abra-Charmander

تذكر أن وسيطة الكلمة الأساسية sep تؤثر فقط على الفاصل بين العناصر، وليس على الأحرف المطبوعة بعد العنصر الأخير.

لنفترض أنك تريد إلغاء المسافة المضافة تلقائيًا بعد العنصر الأخير. في هذه الحالة، يمكنك استخدام وسيطة الكلمة الأساسية end لتحديد سلسلة مختلفة ليتم طباعتها بعد العنصر الأخير:

print(*pokemon_list, sep=', ', end='')

سيؤدي هذا إلى طباعة:

Pikachu, Abra, Charmander

طباعة قائمة بايثون باستخدام join

لطباعة قائمة باستخدام التابع join() في بايثون، يمكنك استخدام بناء الجملة التالي:

print(separator.join(list_name))

سيؤدي هذا إلى ربط عناصر القائمة بفاصل السلسلة بينها. على سبيل المثال، لطباعة قائمة من البوكيمون مفصولة بفاصلة ومسافة، يمكنك القيام بما يلي:

print(', '.join(pokemon_list))

سيؤدي هذا إلى طباعة:

Pikachu, Abra, Charmander

إذا كنت تريد إضافة سلسلة قبل القائمة أو بعدها، فيمكنك استخدام عامل + لربط السلاسل:

print('Pokemons: ' + ', '.join(pokemon_list))

سيؤدي هذا إلى طباعة:

Pokemons: Pikachu, Abra, Charmander

تحويل وطباعة القائمة

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

print(str(pokemon_list))

سيؤدي هذا إلى طباعة القائمة كسلسلة، مع فصل العناصر بفواصل ووضعها بين قوسين مربعين:

['Pikachu', 'Abra', 'Charmander']

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

طباعة وفهرسة قائمة بايثون

لطباعة عناصر القائمة مع فهرسها، يمكنك استخدام دالة enumerate() مع حلقة for:

for i, pokemon in enumerate(pokemon_list):
   print(i, pokemon)

سيؤدي هذا إلى:

0 Pikachu
1 Abra
2 Charmander

تعيد الدالة enumerate() مُكررًا ينتج مجموعات تحتوي على الفهرس وقيمة كل عنصر في القائمة. يمكنك استخدام حلقة for للتكرار على هذه المجموعات وطباعة الفهرس وقيمة كل عنصر.

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

for i, pokemon in enumerate(pokemon_list):
    print('{}: {}'.format(i, pokemon))

سيؤدي هذا إلى:

0: Pikachu
1: Abra
2: Charmander

يمكنك أيضًا استخدام فهم القائمة لإنشاء قائمة جديدة من السلاسل مع الفهرس المنسق وقيمة كل عنصر ثم استخدام دالة print() لطباعة القائمة:

result = ['{}: {}'.format(i, pokemon) for i, pokemon in enumerate(pokemon_list)]
print(result)

سيؤدي هذا إلى:

['0: Pikachu', '1: Abra', '2: Charmander']

تذكر أن دالة enumerate() تعيد مؤشر كل عنصر بدءًا من 0. إذا كنت تريد أن يبدأ المؤشر من قيمة مختلفة، فيمكنك تمريره كحجة دالة. على سبيل المثال:

for i, pokemon in enumerate(pokemon_list, 1):
   print('{}: {}'.format(i, pokemon))

سيؤدي هذا إلى:

1: Pikachu
2: Abra
3: Charmander

طباعة قائمتين بايثون معًا

لطباعة قائمتين معًا، مع تداخل عناصر كل قائمة، تحتاج إلى تكرار قوائم متعددة. لهذا الغرض، يمكنك استخدام حلقة for ودالة zip().

تعيد دالة zip() مُكررًا ينتج مجموعات تحتوي على العناصر في مواضعها المقابلة داخل القائمة. يمكنك استخدام حلقة للتكرار على هذه المجموعات وطباعة عناصر كل قائمة.

وهنا مثال:

a = ['a1', 'a2', 'a3']
b = ['b1', 'b2', 'b3']
for x, y in zip(a, b):
    print(x, y)

سيؤدي هذا إلى:

a1 b1
a2 b2
a3 b3

يمكنك أيضًا استخدام فهم القائمة لإنشاء قائمة جديدة بالعناصر المتداخلة ثم استخدام دالة print() لطباعتها:

a = ['a1', 'a2', 'a3']
b = ['b1', 'b2', 'b3']
result = [x + y for x, y in zip(a, b)]
print(result)

سيؤدي هذا إلى:

['a1b1', 'a2b2', 'a3b3']

من المهم أن تتذكر أن دالة zip() ستكرر فقط عناصر القوائم حتى يتم استنفاد القائمة الأقصر. إذا كانت القوائم ذات أطوال مختلفة، فلن يتم تضمين عناصر القائمة الأطول في الناتج. على سبيل المثال:

a = ['a1', 'a2', 'a3']
b = ['b1', 'b2']
for x, y in zip(a, b):
    print(x, y)

النتيجة:

a1 b1
a2 b2

إذا كنت تريد تضمين جميع عناصر القائمة الأطول، يمكنك ملء القائمة الأقصر بقيم None باستخدام دالة itertools.zip_longest() من وحدة itertools. على سبيل المثال:

import itertools
 
a = ['a1', 'a2', 'a3']
b = ['b1', 'b2']
 
for x, y in itertools.zip_longest(a, b):
    print(x, y)

سيؤدي هذا إلى:

a1 b1
a2 b2
a3 None

طباعة قائمة بايثون متداخلة

لطباعة قائمة متداخلة في بايثون، يمكنك استخدام حلقة للتكرار على عناصر القائمة الخارجية ثم استخدام حلقة أخرى للتكرار على عناصر القائمة الداخلية. على سبيل المثال:

nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
 
for sublist in nested_list:
   for item in sublist:
       print(item)

سيؤدي هذا إلى:

1
2
3
4
5
6
7
8
9

يمكننا أيضًا طباعة كل قائمة في أسطر منفصلة:

We can also print each list in separate lines:
>>> nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> for sublist in nested_list:
...     print(*sublist, sep=",")

النتيجة:

1,2,3
4,5,6
7,8,9

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

nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
result = [item for sublist in nested_list for item in sublist]

سيؤدي هذا إلى:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

هناك دائمًا المزيد…

فيما يلي بعض الطرق الأخرى لطباعة القوائم في بايثون:

  • استخدام حلقة for ودالة range():
for i in range(len(pokemon_list)):
   print(pokemon_list[i])

سيؤدي هذا إلى:

Pikachu
Abra
Charmander
  • خيار آخر هو استخدام وحدة pprint، التي توفر دالة pprint() لطباعة القوائم وهياكل البيانات الأخرى بشكل جميل:
import pprint
 
pokemon_list = ['Pikachu', 'Abra', 'Charmander']
 
pprint.pprint(pokemon_list)

سيؤدي هذا إلى:

['Pikachu', 'Abra', 'Charmander']
  • من الممكن أيضًا استخدام وحدة json، التي توفر دالة dumps() التي يمكنها تحويل قائمة إلى سلسلة JSON:
import json
 
pokemon_list = ['Pikachu', 'Abra', 'Charmander']
 
print(json.dumps(pokemon_list))

سيؤدي هذا إلى:

["Pikachu", "Abra", "Charmander"]
  • أخيرًا وليس آخرًا، يمكنك أيضًا استخدام ميزة f-strings (المتوفرة في Python 3.6 والإصدارات الأحدث). تتيح لك هذه الميزة تضمين التعبيرات داخل أحرف السلسلة باستخدام العنصر النائب {}:
for pokemon in pokemon_list:
   print(f'{pokemon} is a pokemon')

سيؤدي هذا إلى:

Pikachu is a pokemon
Abra is a pokemon
Charmander is a pokemon

ما وراء طباعة القوائم في بايثون

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

كما رأيت في هذه المقالة، هناك العديد من الطرق للعمل مع السلاسل في بايثون. يمكنك الاستفادة من دورتنا التدريبية حول العمل مع السلاسل في بايثون لتوسيع معرفتك بهذا النوع المهم من البيانات.


اكتشاف المزيد من بايثون العربي

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Scroll to Top

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading