تعتبر دالة 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
ما وراء طباعة القوائم في بايثون
في هذه المقالة، استكشفنا العديد من الطرق لطباعة قائمة في بايثون. ولكن هناك المزيد، مثل طباعة قائمة بايثون مرتبة أبجديًا.
كما رأيت في هذه المقالة، هناك العديد من الطرق للعمل مع السلاسل في بايثون. يمكنك الاستفادة من دورتنا التدريبية حول العمل مع السلاسل في بايثون لتوسيع معرفتك بهذا النوع المهم من البيانات.
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.