List comprehension או map

סתם שאלה, יצא לי כבר כמה פעמים שהייתי צריך לבחור או בmap או ב list comprehension. (ותמיד בחרתי בסוף בlist comperhension)
רציתי לשאול אם יש איזה עדיפות אולי מבחינת יעילות או כל בחינה אחרת לאחת מהם?
למשל יש לי רשימה של מספרים ואני רוצה רשימה חדשה עם כל המספרים כפול 2. אז במקום ליצור פונקציה שמקבלת מספר ומכפילה כפול 2 ואז להשתמש ב map ולהמיר לרשימה, אני תמיד עושה בסוף ככה -
new_list = [i *2 for i in iterable] (אותו דבר עם filter בכך שמוסיף תנאי)

3 לייקים

שאלה טובה מאוד.
הנטייה של מפתחי פייתון לדורותיהם היא לכיוון ה־list comprehension.

אני באופן אישי מעדיף map כש:

  1. אין תנאי שצריך לסנן לפיו (לא צריך לעטוף חלק מהביטוי ב־filter)
  2. הפונקציה בחלק הראשון של ה־map אליה היא לא lambda

שים לב שהתחליף ה"אמיתי" ל־map הוא לא list comprehension אלא generator expression – משום שהחל מפייתון 3 הפונקציה map מחזירה generator ולא רשימה.

לשאלה על יעילות – יש עדיפות קטנה ל־map כשמדובר בפונקציות שאינן lambda, אבל זה זניח, לא בא לביטוי בסדרי גודל ובכ"מ פחות מעניין כשאתה מתכנת בפייתון, שהיא כנראה מלכתחילה לא הכלי שתבחר בד"כ לקוד שאמור לרוץ מאוד מהר :slight_smile:

8 לייקים