Whatsup - לינוקס, תוכנה חופשית וקוד פתוח בעברית

תיכנות בלינוקס - שאלה לגבי מערך דו מימדי בפייתון?

moshe2go - 03/12/2017 - 14:48
נושא ההודעה: שאלה לגבי מערך דו מימדי בפייתון?
אני מתחיל ללמוד פייתון ממדריכים ברשת וכרגע צריך להשתמש במערך דו מימדי, משהו פשוט עם הרבה שורות ושתי עמודות. ראיתי שיש כל מיני דברים מוכנים מתוך numpy, אבל זה נראה יותר מתאים למטריצות גדולות וגם כרגע אני רוצה לייצר בעצמי את המערך לצורך לימוד. אז מצאתי משהו כזה שמגדיר מערך כך שהאינדקס הראשון הוא עמודה והשני שורה:
קוד:
# Creates a list containing 5 lists, each of 8 items, all set to 0
w, h = 2, 1000;
Matrix = [[0 for x in range(w)] for y in range(h)]

אבל יש כאן משהו שמבלבל אותי: כשאני מכניס למערך מספר אני צריך דווקא להשתמש בפקודה הבאה שבה הנתון הראשון הוא השורה והשני עמודה - הפוך מהגדרת המערך לעיל כלומר קודם ה y ואחכ x:
קוד:
Matrix[a][0] = a
      Matrix[a][1] = s

האם אני מפספס כאן משהו או שזה פשוט ככה...
mksoft - 03/12/2017 - 15:17
נושא ההודעה:
אתה מייצר את זה בתור של מערך של מערכים (זה לא בדיוק מטריצה).

הלולאה הפנימית היא הטורים, החיצונית היא השורות (הפנימית מתבצעת קודם). כך שהמערך החיצוני הוא מערך של שורות.

כשאתה ניגש אליהם, את קודם מבקש את החיצוני, שזו השורה ואתה מקבל את המערך שלה. לאחר מכן אתה מבקש את הטור באותו המערך.
Anonymous - 03/12/2017 - 15:18
נושא ההודעה:
זה יוצר לך מערך של 2 עמודות ו 1000 שורות.
moshe2go - 03/12/2017 - 15:59
נושא ההודעה:
ציטוט:
אתה מייצר את זה בתור של מערך של מערכים (זה לא בדיוק מטריצה).

בהתחלה לא הבנתי למה אני לא מצליח להכניס ערכים למערך ואז החלפתי את סדר השורות והעמודות וזה עבד, עכשיו אני מבין שזה נובע מאופן בניית המערך...

ציטוט:
זה יוצר לך מערך של 2 עמודות ו 1000 שורות.

אכן - זה מה שאני צריך

תודה
mksoft - 03/12/2017 - 16:05
נושא ההודעה:
זה לא מדוייק. זה יוצר מערך של 1000 שורות. בכל שורה יש מערך עם שתי עמודות (לכן האינדקס הראשוני הוא שורה והמשני הוא עמודה).
moshe2go - 03/12/2017 - 17:28
נושא ההודעה:
אז לסיכום: המערך עושה את העבודה, אבל אם יש פתרון יותר אלגנטי ונחמד עבור מערך של 1000 שורות ושתי עמודות, אשמח לשמוע? או שזה פתרון סביר דיו
Anonymous - 03/12/2017 - 18:48
נושא ההודעה:
זה קצת מבלבל כי בפיתון זה נקרא רשימה (list) ולא מערך. לכן באמת המונחים שורות ועמודות קצת לא נכונים.

אתה יוצר רשימה באורך 1000 כשכל תא ברשימה מכיל רשימה באורך 2. באותה מידה אתה יכול ליצור רשימה עם תא שמכיל dict או משהו אחר בכל תא בנפרד.

בעצם כל תא מכיל 0. אתה לא יכול ליצור רשימה בלי לאתחל אותה עם משהו בניגוד למערך ב C שזה באמת מערך (כלומר איזור בזיכרון שמוגדר ככה שאתה יכול לגשת אליו עם אינדקס).
כל הזמנים הם GMT + 2 שעות