כיצד לעבוד עם סוג הנתונים של רשימת Python

Python מגיע עם אוסף של סוגי נתונים מובנים שהופכים את פעולות ההיאבקות הנפוצות לקלות. ביניהם  הרשימה , סוג אוסף פשוט אך רב-תכליתי. בעזרת רשימת פיתון תוכלו לקבץ אובייקטים של פייתון בשורה חד-ממדית המאפשרת גישה לאובייקטים לפי מיקום, הוספה, הסרה, מיון וחלוקה משנה.

יסודות רשימת פיתון

הגדרת רשימה בפייתון היא קלה - פשוט השתמש בתחביר הסוגריים כדי לציין פריטים ברשימה.

list_of_ints = [1, 2, 3]

גם פריטים ברשימה לא חייבים להיות מאותו סוג. הם יכולים להיות כל אובייקטים של פייתון. (הנה, נניח  Three שזו פונקציה.)

list_of_objects = ["One", TWO, Three, {"Four": 4}, None]

שים לב שלכך שיש אובייקטים מעורבים ברשימה השלכות על מיון הרשימה. ניכנס לזה בהמשך.

הסיבה הגדולה ביותר לשימוש ברשימה היא היכולת למצוא אובייקטים לפי מיקומם ברשימה. לשם כך, אתה משתמש בסימון האינדקס של Python: מספר בסוגריים, החל מ- 0, המציין את מיקום הפריט ברשימה.

לדוגמא לעיל, list_of_ints[0]תשואות 1. list_of_ints[1]תשואות 2. list_of_objects[4]יהיה  None האובייקט.

אינדקס רשימות פייתון

אם אתה משתמש במספר שלם חיובי עבור האינדקס, המספר השלם מציין את מיקום הפריט לחיפוש. אך אם אתה משתמש במספר   שלם שלילי , אז המספר השלם מציין את המיקום החל  מסוף  הרשימה. לדוגמא, שימוש באינדקס -1הוא דרך שימושית לתפוס את הפריט האחרון מרשימה ולא משנה גודל הרשימה.

list_of_ints[-1] תשואות  3list_of_objects[-1] תשואות  None.

אתה יכול גם להשתמש במשתנה שלם כאינדקס שלך. אם  x=0list_of_ints[x] מניב 1, וכן הלאה.

הוספה והסרה של פריטי רשימת Python

לפייתון יש כמה דרכים בהן ניתן להוסיף או להסיר פריטים מרשימה.

  • .append() מכניס פריט  בסוף  הרשימה. לדוגמא, list_of_ints.append(4)יהפוך  list_of_ints לרשימה  [1,2,3,4]. התוספות מהירות ויעילות; לוקח בערך אותו זמן להוסיף פריט אחד לרשימה ולא משנה כמה ארוכה הרשימה.
  • .pop() מסיר ומחזיר את הפריט האחרון מהרשימה. אם היינו רצים  x = list_of_ints.pop() על המקור  list_of_ints, x יכיל את הערך  3. (אינך צריך להקצות את התוצאות  .pop() לערך אם אינך זקוק לו.)  .pop()הפעולות גם מהירות ויעילות.
  • .insert() מכניס פריט למיקום שרירותי כלשהו ברשימה. למשל,  list_of_ints.insert(0,10) יהפוך  list_of_intsל [10,1,2,3]. שים לב שככל שאתה מכניס לחזית הרשימה, פעולה זו תהיה איטית יותר, אם כי לא תראה האטה רבה אלא אם כן ברשימה שלך יש אלפי אלמנטים רבים או שאתה מבצע את ההוספות בלולאה הדוקה.
  • .pop(x) מסיר את הפריט באינדקס  x. אז  list_of_ints.pop(0) תסיר את הפריט באינדקס 0. שוב, ככל שאתה קרוב יותר לחזית הרשימה, פעולה זו יכולה להיות איטית יותר.
  • .remove(item) מסיר פריט מרשימה, אך  לא  מבוסס על האינדקס שלו. במקום זאת, .remove()מסיר את  המופע הראשון  של האובייקט שאתה מציין, ומחפש מראש הרשימה למטה. שכן  [3,7,7,9,8].remove(7), הראשון  7 יוסר, וכתוצאה מכך הרשימה  [3,7,9,8]. גם פעולה זו יכולה להאט ברשימה גדולה, מכיוון שהיא תיאורטית צריכה לחצות את הרשימה כולה לעבודה.

פורסים רשימת פיתון

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

ראית לעיל כיצד להשתמש בסימון בסוגריים כדי להשיג פריט בודד מרשימה: my_list[2]למשל. פרוסה להשתמש גרסה של אותו בסימון המדד (ובעקבות אותם כללי האינדקס): list_object[start:stop:step].

  • start הוא המיקום ברשימה להתחיל את הנתח. 
  • stop היא המיקום ברשימה בה אנו מפסיקים לחתוך. במילים אחרות,  העמדה הזו וכל מה שאחריה  מושמט.
  • step הוא אינדיקטור "כל אלמנט nth" אופציונלי עבור הנתח. כברירת מחדל זהו  1, כך שהפרוסה שומרת על כל רכיב מהרשימה שממנו הוא פורס. הגדר stepל  2, ותבחר כל אלמנט שני, וכן הלאה.

הנה כמה דוגמאות. שקול רשימה זו:

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

slice_list [0: 5] = [1, 2, 3, 4, 5]

(שים לב שאנחנו עוצרים באינדקס 4, ולא באינדקס 5!)

slice_list [0: 5: 2] = [1, 3, 5]

אם תשמיט אינדקס פרוסות מסוים, Python מניח ברירת מחדל. השאר את אינדקס ההתחלה, ופייתון מניח את תחילת הרשימה:

slice_list [: 5] = [1, 2, 3, 4, 5]

השאר את אינדקס העצירה, ופייתון מניח את סוף הרשימה:

slice_list [4:] = [5, 6, 7, 8, 9, 0]

step האלמנט יכול גם להיות  שלילי . זה מאפשר לנו לקחת פרוסות שהן עותקים הפוכים של המקור:

slice_list [:: - 1] = [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]

שים לב שניתן לחתוך לאחור באמצעות אינדקסים התחלה ועצירה שעוברים אחורה, ולא קדימה:

slice_list [5: 2: -1] = [6, 5, 4]

זכור גם שפרוסות הרשימות הן  עותקים  של הרשימה המקורית. הרשימה המקורית נותרה ללא שינוי. 

[גם בנושא: מיטב הקורסים למדעי הנתונים בחינם בהסגר]

מיון רשימת פייתון

Python מספק שתי דרכים למיון רשימות: באפשרותך ליצור רשימה חדשה וממוינת מהרשימה הישנה, ​​או באפשרותך למיין רשימה קיימת במקום. לאפשרויות אלה יש התנהגויות שונות ותרחישי שימוש שונים.

כדי ליצור רשימה חדשה וממוינת, השתמש  sorted() בפונקציה ברשימה הישנה:

new_list = מיון (old_list)

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

אם ברצונך למיין רשימה הפוכה, העביר את  reverse הפרמטר:

new_list = sorted(old_list, reverse=True)

The other way to sort, in-place sorting, performs the sort operation directly on the original list. To do this, use the list’s .sort()method:

old_list.sort()

.sort() also takes reverse as a parameter, allowing you to sort in reverse.

Both sorted() and .sort() also take a key parameter. The key parameter lets you provide a function that can be used to perform a custom sorting operation. When the list is sorted, each element is passed to the key function, and the resulting value is used for sorting. For instance, if we had a mix of integers and strings, and we wanted to sort them, we could use key like this:

mixed_list = [1,"2",3,"4", None] def sort_mixed(item): try: return int(item) except: return 0 sorted_list = sorted(mixed_list, key = sort_mixed) print (sorted_list)

Note that this code wouldn’t convert each element of the list into an integer! Rather, it would use the integer value of each item as its sort value. Also note how we use a try/except block to trap any values that don’t translate cleanly into an integer, and return 0 for them by default.

Python lists are not arrays

One important thing to know about lists in Python is that they aren’t “arrays.” Other languages, like C, have one-dimensional or multi-dimensional constructions called arrays that accept values of a single type. Lists are heterogenous; they can accept objects of any type.

What’s more, there is a separate array type in Python. The Python array is designed to emulate the behavior of an array in C, and it’s meant chiefly to allow Python to work with C arrays. The array type is useful in those cases, but in almost every pure-Python case you’ll want to use lists.

When to use Python lists (and when not to)

So when are Python lists most useful? A list is best when:

  • You need to find things quickly by their position in a collection. Accessing any position in a list takes the same amount of time, so there is no performance penalty for looking up even the millionth item in a list.
  • You’re adding and removing to the collection mainly by appending to the end or removing from the end, in the manner of a stack. Again, these operations take the same amount of time regardless of the length of the list.

A Python list is less suitable when:

  • You want to find an item in a list, but you don’t know its position. You can do this with the .index() property. For instance, you could use list_of_ints.index(1) to find the index of the first occurrence of the number 1 in list_of_ints. Speed should not be not an issue if your list is only a few items long, but for lists thousands of items long, it means Python has to search the entire list. For a scenario like this, use a dictionary, where each item can be found using a key, and where the lookup time will be the same for each value.
  • You want to add or remove items from any position but the end. Each time you do this, Python must move every other item after the added or removed item. The longer the list, the greater the performance issue this becomes. Python’s deque object is a better fit if you want to add or remove objects freely from either the start or the end of the list.

How to do more with Python

  • How to package Python apps with BeeWare Briefcase
  • How to run Anaconda side by side with other Pythons
  • How to use Python dataclasses
  • Get started with async in Python
  • How to use asyncio in Python
  • 3 steps to a Python async overhaul
  • How to use PyInstaller to create Python executables
  • Cython tutorial: How to speed up Python
  • How to install Python the smart way
  • How to manage Python projects with Poetry
  • How to manage Python projects with Pipenv
  • Virtualenv ו- venv: הסברים על סביבות וירטואליות של Python
  • Python virtualenv ו- venv do's and donts
  • הסבר על השחלת פיתון ותהליכי משנה
  • כיצד להשתמש בבאגים של פייתון
  • כיצד להשתמש ב- timeit לפרופיל קוד פייתון
  • כיצד להשתמש ב- cProfile לפרופיל קוד פייתון
  • כיצד להמיר את פייתון ל- JavaScript (ובחזרה)