
lambda x: x > 5.and, למשל מספרים גדולים מ-5 שהם זוגיים, לפי שארית החלוקה ב-2.filter(lambda x: x > 5, lst)map(lambda x: x + 5, range(10))[x for x in range(10) if x > 5 and x % 2 == 0] כחלופה ל-filterהטקסט המלא של הדקות הראשונות בהרצאה «map & filter» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, בשיעור הזה נדבר על הפונקציות map ופילטר פייתון. אז נתחיל עם הפונקציה פילטר. נגיד שיש לנו איזשהו ליסט שיש בתוכו מספרים מ-1 עד 10, ואני רוצה עכשיו לקבל את הליסט, ליסט חדש, יש בו את כל המספרים שהם קטנים מ-5.
אז דרך אחת לעשות את זה זה עם הפונקציה, זה עם הפונקציה פילטר. נעשה b שווה לפילטר. הפילטר מקבלת שתי דברים, מקבלת, הפרמטר הראשון שהיא מקבלת זה function והפרמטר השני שהיא מקבלת זה sequence, רצף.
בואו נתחיל מהדבר הפשוט, נגדיר פה פונקציה, נקרא לה a שמקבלת x והיא, כל מה שהיא עושה זה return x גדול מ-5, פה נשים את a, פה נשים את b ונשנה את זה ל-st שזה יהיה קצת יותר, ובואו נראה מה אנחנו מקבלים עכשיו.
אוקיי, עכשיו במקרה הזה זה מאוד קל לראות מה קורה פה כי יש לנו את קריאה ל-a ו-a נמצאת ממש פה מעל אבל זה לא חייב להיות המקרה יכול להיות ש-a נמצאת בקובץ אחר עכשיו אם זה המצב זה יהיה מאוד עצוב כי a היא סך הכל פונקציה ממש פשוטה שכל מה שהיא עושה זה פשוט מחזירה x גדול מ-5 כלומר היא מחזירה true
עבור כל ה-x שהם גדולים מ-5 אז מה שפייתון מאפשרת לנו לעשות זה במקום לעשות פה a אלא פשוט לכתוב למדה x אז x גדול מחמש קיבלנו אותו דבר כלומר לא צריך בכלל להגדיר את a אפשר למחוק אותה בוא נראה עוד איזה שהיא דוגמה יותר מתוחכמת לפילטר בוא נגיד שיש לנו עוד פעם דברים של דברים מ-1 עד
10 ואנחנו רוצים להחזיר רק את המספרים הזוגיים שגדולים מחמש כל מה שצריך לעשות זה לעשות פילטר למדה x גדול מ-5 and x מודולו 2 שווה שווה 0 ופה לתת לו את הרצף של lst וקיבלנו המורכבות של הלמדה היא מוגבלת יחסית ואפשר להכיל רק ביטוי אחד כמובן שאפשר לתת פה גם דוגמה לפונקציה הרבה יותר מורכבת ולהגדיר את הפונקציה בצורה חיצונית ואז לא תהיה
שום בעיה פשוט הקוד יהיה טיפה פחות קריא כי נצטרך כל פעם צריך לקפוץ לפונקציה ולהבין מה היא עושה עכשיו עכשיו, הדבר הזה, מי שיתקל, זה יזכיר לו List Comprehensions.
כלומר, אם היינו רוצים לקבל את אותו אפקט כמו פה, כל מה שהיינו יכולים לעשות, היינו יכולים לעשות גם את הדבר הזה.
X for X in range 10 if, ואז פשוט להעתיק את התנאי הזה. באנו ב-One Liner, בשורה אחת, באנו את כל הדבר הזה.
זהו סוג של, אפשר לומר, כפילות בשפה. אפשר לעשות את זה גם בצורה של הפילטר וגם בצורה של הליסט קומפריאנשן. פייתון יותר דוחפת לכיוון של הליסט קומפריאנשן, אבל אין שום סיבה שלא נשתמש גם בפילטר, ואנשים משתמשים בשניהם, ולא, בוא נאמר שזה לא מוכח שאחד מהם יותר יעיל