تخزين البيانات لنفترض أنك طورت لعبة كمبيوتر تسمى "User Hostile" حيث يتنافس اللاعبون ضد واجهة كمبيوتر معقدة وغير ودية. أنت الآن بحاجة إلى كتابة برنامج يتتبع المبيعات الشهرية لهذه اللعبة على مدار فترة خمس سنوات. أو لنفترض أنك بحاجة إلى جرد بطاقات تداول Hacker Hero.
قريبًا ستصل إلى استنتاج مفاده أنك بحاجة إلى أكثر من أنواع البيانات الأساسية البسيطة لتخزين المعلومات ومعالجتها.
نبسب ؛

القوائم (المصفوفات) لتسهيل العمل مع كمية كبيرة من البيانات ، يتم إعطاء مجموعة من الخلايا اسمًا شائعًا. تسمى هذه المجموعة من الخلايا مصفوفة .
نبسب ؛
Array & ndash؛ إنها مجموعة من خلايا الذاكرة من نفس النوع ، وتقع جنبًا إلى جنب ولها اسم شائع. كل خلية في المجموعة لها رقم فريد.

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

& nbsp؛

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

إنشاء مصفوفة عند إنشاء مصفوفة ، يتم تخصيص مساحة في الذاكرة (عدد معين من الخلايا). 1) يمكن إنشاء المصفوفات عن طريق تعداد العناصر ببساطة: أ = [1 ، 4 ، 7 ، 12 ، 5] طباعة (نوع (أ)) سيخرج البرنامج
& lt؛ class & # 39؛ list & # 39؛ & gt؛
أي أن المصفوفة هي كائن من النوع & nbsp؛ list (مترجم من الإنجليزية list ).

2) يمكن أن تتكون المصفوفات من بيانات من أي نوع - أعداد صحيحة أو أرقام حقيقية ، سلاسل أحرف & nbsp؛ A = [& quot؛ Vasya & quot ؛، & quot؛ Petya & quot ؛، & quot؛ Fedya & quot؛]

بعض طرق التعامل مع المصفوفات 3) يمكن "إضافة" المصفوفات. أ = [1، 5] + [25، 7]
4) & nbsp؛ يمكن استبدال إضافة مصفوفات متطابقة بالضرب. لذلك من السهل إنشاء مصفوفة مليئة بنفس القيم ، مثل: A = [0] * 10 # أنشأ مصفوفة من 10 عناصر وملأها بالأصفار
5) على & nbsp؛ المصفوفة دائمًا "تعرف" حجمك. يتم استخدام الدالة & nbsp؛ len () لتحديد حجم المصفوفة. غالبًا ما يتم تخزين حجم المصفوفة في متغير منفصل بحيث يمكن تغيير البرنامج بسهولة للعمل مع حجم مصفوفة مختلف.

مثال N = 10 # تخزين حجم المصفوفة في المتغير N A = [0] * N # أنشئ مصفوفة بالحجم N print (len (A)) # اطبع حجم المصفوفة يمكن ضبط حجم المصفوفة من لوحة المفاتيح.

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

للإشارة إلى عنصر & nbsp؛ من مصفوفة ، يجب تحديد اسم المصفوفة متبوعًا بفهرسها بين أقواس مربعة. على سبيل المثال ، يمكنك كتابة القيمة 100 إلى عنصر المصفوفة في الفهرس 1 كما يلي: A [1] = 100 .


عليك أن تتذكر! يبدأ ترقيم الصفوف في البايثون من الصفر!
(هذا شرط أساسي - يجب أن تبدأ من نقطة الصفر. هذا مهم بشكل خاص للتذكر).
نبسب ؛
مثال x = (A [3] + 5) * A [1] # اقرأ قيم A [3] و A [1] A [0] = x + 6 # اكتب قيمة جديدة إلى A [0]
دعنا نحلل البرنامج للعمل مع عناصر المصفوفة. <قبل> أنا = 1 A = [0] * 5 # أنشئ مصفوفة من 5 عناصر A [0] = 23 # في كل عنصر من عناصر المصفوفة الخمسة (الفهارس من 0 إلى 4) أ [1] = 12 # اكتب قيمة محددة أ [2] = 7 أ [3] = 43 أ [4] = 51 A [2] = A [i] + 2 * A [i-1] + A [2 * i] # قم بتغيير قيمة العنصر بالفهرس 2 إلى نتيجة التعبير # منذ i = 1 ، ثم نستبدل قيمة المتغير i في التعبير الذي نحصل عليه # التعبير التالي A [2] = A [1] + 2 * A [0] + A [2] ؛ طباعة (A [2] + A [4])
نتيجة للتشغيل هذا البرنامج ستظهر على الشاشة قيمة مجموع عناصر المصفوفة مع الفهرس 2 والفهرس 4 الذي يساوي 116. كما ترون من المثال ، يمكننا الوصول إلى أي عنصر من المصفوفة . وأيضًا احسب رقم العنصر المطلوب باستخدام صيغ مختلفة (على سبيل المثال ، كما في البرنامج A [i-1] أو A [2 * i] ). في هذه الحالات ، سيتم حساب فهارس العناصر وتعتمد على قيمة i.

في Python ، يمكنك استخدام قيم الفهرس السالبة للمصفوفات ، والعدد من نهاية المصفوفة. على سبيل المثال: A [-1] - العنصر الأخير في المصفوفة أ [-2] - العنصر قبل الأخير إلخ.

دعنا نحلل البرنامج. العدد = 5 A = [0] * N & nbsp؛ س = 1 طباعة (A [x - 3]) & nbsp؛ # الوصول إلى العنصر A [-2] print (A [x - 3 + len (A)]) # عنصر وصول A [3] نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ # هذا هو نفس عنصر & nbsp؛ A [-2] A [x + 4] = A [x] + A [2 * (x + 1)] & nbsp؛ # بعد استبدال x في التعبيرات والحسابات & nbsp؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ # احصل على السطر التالي أ [5] = أ [1] + أ [4] نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ # أ [5] لا يوجد مثل هذا العنصر نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ # خطأ - مجموعة خارج الحدود نظرًا لأن المصفوفة معلنة بخمسة عناصر ، فسيتم ترقيم العناصر من -5 إلى 4 . نرى أن البرنامج في السطر السادس يشير إلى عنصر غير موجود: A [5] .
اتضح أن البرنامج تجاوز حدود المصفوفة.
نبسب ؛

في مثل هذه الحالات ، يتعطل البرنامج عادةً مع خطأ وقت التشغيل .

التكرار على عناصر المصفوفة عند العمل مع المصفوفات ، عادة ما يتعين عليك العمل مع جميع عناصر المصفوفة دفعة واحدة.
نبسب ؛
التكرار عبر العناصر : التكرار خلال جميع عناصر المصفوفة وإجراء بعض العمليات ، إذا لزم الأمر على كل منهم.
لهذا ، غالبًا ما يتم استخدام حلقة بها متغير ، والتي تتغير من 0 إلى N-1 ، حيث يمثل N رقم المصفوفة العناصر.
ضمن N سننظر في الحجم الحالي للمصفوفة ، أي & nbsp؛ & nbsp؛ N = len (A) . ... لأني في النطاق (N): # هنا نعمل مع A [i] ... في الحلقة المحددة ، المتغير i سيأخذ القيم 0، 1، 2، ...، N-1 . & nbsp؛ وهكذا ، في كل خطوة من الحلقة ، نصل إلى عنصر محدد من المصفوفة بالرقم i .
وبالتالي ، يكفي وصف ما يجب القيام به باستخدام عنصر واحد من مجموعة A [i] ووضع هذه الإجراءات داخل هذه الحلقة.

لنكتب برنامجًا يملأ المصفوفة بأول N & nbsp ؛ الأرقام الطبيعية ، أي في نهاية البرنامج ، يجب أن تصبح عناصر المصفوفة متساوية أ [0] = 1 أ [1] = 2 أ [2] = 3 ... أ [N - 1] = N من السهل رؤية النمط: يجب أن تكون قيمة عنصر المصفوفة أكبر بمقدار 1 من فهرس العنصر.

ستبدو الحلقة هكذا لأني في النطاق (N): ا [i] = i + 1

قائمة المولدات تتيح لك لغة Python حل العديد من المشكلات بإيجاز وموثوقية. & nbsp ؛ دعنا ندرج الاحتمالات الرئيسية لملء المصفوفة. 1) يمكن كتابة وتعبئة المصفوفة على النحو التالي: A = [ i لـ i في النطاق (N)] # مع N = 5 ، المصفوفة A = [0،1،2،3،4] A = [ i * i لـ i في النطاق (N)] # مع N = 5 ، المصفوفة A = [0،1،4،9،16] لـ i in range (N) - الحلقات عبر جميع قيم i من 0 إلى N-1 .

سيحتوي العنصر التالي من المصفوفة على القيمة التي تأتي قبل كلمة لـ ، في الحالة الأولى i ، في الحالة الثانية - i * i .

نحصل على نفس النتيجة باستخدام الترميز التالي: <قبل> A = list (range (N)) # with N = 5، array A = [0،1،2،3،4]
2) لا يمكنك الكتابة إلى المصفوفة كل القيم ، ولكن فقط تلك التي تفي بشرط معين.
نبسب ؛
مثال ملء المصفوفة بجميع الأرقام الزوجية في النطاق من 0 إلى 9 . A = [i for i in range (10) إذا كان i٪ 2 == 0] print (* A) # array A = [0،2،4،6،8] في هذه الحالة ، عليك أن تفهم أن طول المصفوفة سيكون أقل من 10. & nbsp؛

3) يمكن ملء مصفوفة من لوحة المفاتيح بعناصر تقع واحدة في كل سطر بطريقتين.
نبسب ؛ <الجسم>
العدد = 5 أ = [0] * 5 لأني في النطاق (N): أ [i] = int (input ()) <قبل> A = [int (input ()) لـ i في النطاق (N)] # في كل مرة تتكرر فيها الحلقة ، # يتم تحويل سلسلة الإدخال # إلى عدد صحيح (باستخدام int) # ويضاف هذا الرقم إلى المصفوفة


4) يعد ملء مصفوفة من لوحة المفاتيح بعناصر موجودة جميعها في نفس السطر أكثر تعقيدًا بعض الشيء. تحتاج إلى قراءة السلسلة ، وتقسيمها إلى عناصر ، ثم تحويل كل عنصر إلى عدد صحيح ق = المدخلات (). الانقسام () نبسب ؛ A = [int (i) for i in s] & nbsp؛ أو هكذا A = list (map (int، input (). split ())) # قائمة الوظائف المضمنة () نبسب ؛ # يحول التسلسل نبسب ؛ # لقائمة قابلة للتغيير

إخراج المصفوفة يمكنك أيضًا عرض مجموعة على الشاشة بطرق مختلفة.
نبسب ؛ <الجسم>
الطريقة القياسية المستخدمة في العديد من لغات البرمجة. يمكن كتابة هذه الدورة بشكل أقصر. يتم تعبئة قيمة х في كل خطوة من الحلقة بالعنصر التالي من المصفوفة. في بايثون ، يمكنك الكتابة بهذا الشكل
بالنسبة لـ i في النطاق (len (A)): print (A [i]، end = "") لـ x في A: print (x، end = & quot؛ & quot؛) <قبل> طباعة (* أ) # علامة * أمام الاسم # من المصفوفة يعني ذلك # يحتاج إلى تحويل # مجموعة في مجموعة من القيم الفردية