107 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			107 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								title: List Comprehension
							 | 
						||
| 
								 | 
							
								localeTitle: قائمة الفهم
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								## قائمة الفهم
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								يعد "الفهم بالقائمة" طريقة للتكرار من خلال قائمة لإنتاج قائمة جديدة تعتمد على بعض الشروط. يمكن أن يكون الأمر مربكًا في البداية ولكن بمجرد أن تتأقلم مع الصيغة ، فهي قوية جدًا وسريعة.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								الخطوة الأولى في تعلم كيفية استخدام فهم القائمة هي النظر إلى الطريقة التقليدية للتكرار من خلال قائمة. فيما يلي مثال بسيط يقوم بإرجاع قائمة جديدة بالأرقام الزوجية.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 `# Example list for demonstration 
							 | 
						||
| 
								 | 
							
								 some_list = [1, 2, 5, 7, 8, 10] 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 # Empty list that will be populate with a loop 
							 | 
						||
| 
								 | 
							
								 even_list = [] 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 for number in some_list: 
							 | 
						||
| 
								 | 
							
								  if number % 2 == 0: 
							 | 
						||
| 
								 | 
							
								    even_list.append(number) 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 # even_list now equals [2, 8, 10] 
							 | 
						||
| 
								 | 
							
								` 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								أولا يتم إنشاء قائمة مع بعض الأرقام. تقوم بعد ذلك بإنشاء قائمة فارغة ستحمل نتائجك من الحلقة. في الحلقة ، تحقق مما إذا كان كل رقم قابل للقسمة على 2 ، وفي هذه الحالة ، يمكنك إضافته إلى even\_list. استغرق هذا خمسة أسطر من الشفرة لا تشمل التعليقات والمساحة البيضاء التي ليست كثيرة في هذا المثال.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								الآن على سبيل المثال فهم القائمة.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 `# Example list for demonstration 
							 | 
						||
| 
								 | 
							
								 some_list = [1, 2, 5, 7, 8, 10] 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 # List Comprehension 
							 | 
						||
| 
								 | 
							
								 even_list = [number for number in some_list if number % 2 == 0] 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 # even_list now equals [2, 8, 10] 
							 | 
						||
| 
								 | 
							
								` 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								مثال آخر ، مع نفس الخطوتين: سيؤدي ما يلي إلى إنشاء قائمة بالأرقام التي تتوافق مع الأرقام الموجودة في `my_starting_list` مضروبة في 7.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 `my_starting_list = [1, 2, 3, 4, 5, 6, 7, 8] 
							 | 
						||
| 
								 | 
							
								 my_new_list = [] 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 for item in my_starting_list: 
							 | 
						||
| 
								 | 
							
								 my_new_list.append(item * 7) 
							 | 
						||
| 
								 | 
							
								` 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								عند تشغيل هذا الرمز ، تكون القيمة النهائية لـ `my_new_list` هي: `[7, 14, 21, 28, 35, 42, 49, 56]`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								يمكن لمطوّر البرامج الذي يستخدم فهم القوائم تحقيق النتيجة نفسها باستخدام فهم القائمة التالي ، مما يؤدي إلى نفس `my_new_list` .
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 `my_starting_list = [1, 2, 3, 4, 5, 6, 7, 8] 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 my_new_list = [item * 7 for item in my_starting_list] 
							 | 
						||
| 
								 | 
							
								` 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								هناك صيغة بسيطة للكتابة بطريقة فهم قائمة هي:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`my_list = [{operation with input n} for n in {python iterable}]`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								استبدل `{operation with input n}` مع أنك تريد تغيير العنصر الذي تم إرجاعه من التكرار. يستخدم المثال أعلاه `n * 7` ولكن يمكن أن تكون العملية بسيطة أو معقدة حسب الضرورة.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								استبدل `{python iterable}` بأي طريقة قابلة للتكرار. ستكون [أنواع التسلسل](https://guide.freecodecamp.org/python/sequence-types) أكثر شيوعًا. تم استخدام قائمة في المثال أعلاه ، لكن الصفوف والنطاقات شائعة أيضًا.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								يضيف الفهم قائمة عنصر من قائمة موجودة إلى قائمة جديدة إذا تم استيفاء بعض الشرط. إنه أكثر إتقانا ، ولكنه أيضا أسرع بكثير في معظم الحالات. في بعض الحالات ، قد يعوق فهم القائمة إمكانية القراءة ، لذا يجب أن يوازن الشخص الطيار خياراته عند اختيار استخدام فهم القائمة.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## أمثلة على الفهم بالقائمة الشرطية
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								يمكن التحكم في تدفق السيطرة في فهم القوائم باستخدام الشروط الشرطية. ل exmaple:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 `only_even_list = [i for i in range(13) if i%2==0] 
							 | 
						||
| 
								 | 
							
								` 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								هذا يكافئ الحلقة التالية:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 `only_even_list = list() 
							 | 
						||
| 
								 | 
							
								 for i in range(13): 
							 | 
						||
| 
								 | 
							
								  if i%2 == 0: 
							 | 
						||
| 
								 | 
							
								    only_even_list.append(i) 
							 | 
						||
| 
								 | 
							
								` 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								يمكن للفهم قائمة تحتوي أيضا متداخلة إذا كانت الظروف. خذ بعين الاعتبار الحلقة التالية:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 `divisible = list() 
							 | 
						||
| 
								 | 
							
								 for i in range(50): 
							 | 
						||
| 
								 | 
							
								  if i%2 == 0: 
							 | 
						||
| 
								 | 
							
								    if i%3 == 0: 
							 | 
						||
| 
								 | 
							
								      divisible.append(i) 
							 | 
						||
| 
								 | 
							
								` 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								باستخدام فهرسة القوائم ، يمكن كتابة هذا على النحو التالي:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 `divisible = [i for i in range(50) if i%2==0 if i%3==0] 
							 | 
						||
| 
								 | 
							
								` 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								يمكن استخدام عبارة If-Else أيضًا مع فهم القائمة.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 `list_1 = [i if i%2==0 else i*-1 for i in range(10)] 
							 | 
						||
| 
								 | 
							
								` 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### معلومات اكثر:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[بايثون هياكل البيانات - قوائم](https://docs.python.org/2.7/tutorial/datastructures.html)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[بايثون للحلقات](https://guide.freecodecamp.org/python/for-loop-statements)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[قوائم بايثون](https://guide.freecodecamp.org/python/learn-about-python-lists)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[بايثون للمبتدئين - قائمة الفهم](http://www.pythonforbeginners.com/basics/list-comprehensions-in-python)
							 |