12 תשובות
זה לבגרות ???
כי אן כן אז אכלתי אותה
כי אן כן אז אכלתי אותה
לולאת for
יש לי כמה שאלות:
1. האם את רוצה שאוסיף פונקצייה לזה או שפשוט סתם אצור רשימה
2. את רוצה שהפתרון יהיה על רשימה כללית או על רשימה שמכילה רק מחרוזות? כי פתרון כללי יותר קשה אבל עדיין אפשרי. לפני שאני מתחילה, רק אגיד שאני כוללת גם דוגמאות הרצה. תשאלי אותי אם יש משהו לא ברור
הנה הפתרון כללי:
maxstring=lambda a:max(filter(lambda b:type(b)==str,a))
print(maxstring([0,0.0,'my','favorite','website','is','stips']))
הנה הפתרון ספצפית לרשימה שכוללת רק מחרוזות:
maxstring=lambda a:max(a)
print(maxstring(['my','favorite','website','is','stips']))
1. האם את רוצה שאוסיף פונקצייה לזה או שפשוט סתם אצור רשימה
2. את רוצה שהפתרון יהיה על רשימה כללית או על רשימה שמכילה רק מחרוזות? כי פתרון כללי יותר קשה אבל עדיין אפשרי. לפני שאני מתחילה, רק אגיד שאני כוללת גם דוגמאות הרצה. תשאלי אותי אם יש משהו לא ברור
הנה הפתרון כללי:
maxstring=lambda a:max(filter(lambda b:type(b)==str,a))
print(maxstring([0,0.0,'my','favorite','website','is','stips']))
הנה הפתרון ספצפית לרשימה שכוללת רק מחרוזות:
maxstring=lambda a:max(a)
print(maxstring(['my','favorite','website','is','stips']))
הנה הסבר למקרה שלא הבנת
בפתרון לרשימה שכוללת רק מחרוזות, יצרתי את המשתנה maxstring שהוא תחשיב למדא עם הפרמטר a, וערך ההחזרה הוא max(a). למקרה שאת לא יודעת, בפייתון יש פונקציה בנויה ששמה max שיכולה להחזיר איבר הכי גדול ברשימה או כל סוג איטרטור אחר. היא משווה את האיברים על פי גודלם, ולמזלך, ניתן להשוות בין מחרוזות ולהגיע למסקנה של מי מהן הגדולה יותר
בפתרון הכללי יש קצת יותר מורכבות. בגלל שפונקציית max מתבססת על השוואה בין איברים, אז גם צריך שהם יהיו מאותו סוג אבל לא בהכרח מאותו טיפוס נתונים. לדוגמה, בפייתון את כן יכולה להשוות מספרים שלמים למספרים לא שלמים אפילו שהם לא בעלי טיפוס נתונים כי אחד מהם הוא int והאחר הוא float . לעומת זו, זה פחות פועל על טיפוסי נתונים לא מספריים כי למשל אי אפשר להשוות מספר למחרוזת. אבל למה אני אומרת את זה? בגלל שזה ההסבר ללמה אני לא יכולה ישירות פשוט להשתמש בפונקציית max, כי אני קודם צריכה לוודא שיהיה רק מחרוזות בתוך הרשימה או האיטרטור בכללי.
אז איך אני עושה את זה?
יש פונקציה בנויה ששמה filter. כמו ששמה אומר, היא סוג של מסננת איברים מתוך איטרטור על פי תנאי כלשהו. התנאי הזה נקבע על פי הפרמטר הראשון שהוא פונקציה. אם הפונקציה כאשר הארגומנט שמוצב בה הוא איבר מהאיטרטור (בכל פעם איבר אחד) אז אם כשהאיבר מוצב, והתוצאה היא בוליאינית נכון, אז האיבר הזה הולך להישאר וכל אלה שלא, אז לא ישארו. זה באמת קשב לתאר, אבל זה איך שזה פועל בערך.
עכשיו התנאי שבחרתי פה הוא שהאיבר יהיה מחרוזת ולכן השתמשתי בפונקצייה lambda b:type(b)==str כי יש כאן את הפרמטר b שאם הטיפוס נתונים שלו הוא מחרוזת כלומר str, אז יוחזר true, אחרת false, ובגלל שהאיברים היחידים שישארו הם רק אלה שנכונים בוליאינית אז רק אלה ששווים בוליאינית לtrue ישארו ואלה יהיו אך ורק כל האיברים שטיפוס הנתונים שלהם באיטרטור וספצפית ברשימה (במקרה שלך, לא שזה משנה באמת) יהיה מחרוזת.
בפתרון לרשימה שכוללת רק מחרוזות, יצרתי את המשתנה maxstring שהוא תחשיב למדא עם הפרמטר a, וערך ההחזרה הוא max(a). למקרה שאת לא יודעת, בפייתון יש פונקציה בנויה ששמה max שיכולה להחזיר איבר הכי גדול ברשימה או כל סוג איטרטור אחר. היא משווה את האיברים על פי גודלם, ולמזלך, ניתן להשוות בין מחרוזות ולהגיע למסקנה של מי מהן הגדולה יותר
בפתרון הכללי יש קצת יותר מורכבות. בגלל שפונקציית max מתבססת על השוואה בין איברים, אז גם צריך שהם יהיו מאותו סוג אבל לא בהכרח מאותו טיפוס נתונים. לדוגמה, בפייתון את כן יכולה להשוות מספרים שלמים למספרים לא שלמים אפילו שהם לא בעלי טיפוס נתונים כי אחד מהם הוא int והאחר הוא float . לעומת זו, זה פחות פועל על טיפוסי נתונים לא מספריים כי למשל אי אפשר להשוות מספר למחרוזת. אבל למה אני אומרת את זה? בגלל שזה ההסבר ללמה אני לא יכולה ישירות פשוט להשתמש בפונקציית max, כי אני קודם צריכה לוודא שיהיה רק מחרוזות בתוך הרשימה או האיטרטור בכללי.
אז איך אני עושה את זה?
יש פונקציה בנויה ששמה filter. כמו ששמה אומר, היא סוג של מסננת איברים מתוך איטרטור על פי תנאי כלשהו. התנאי הזה נקבע על פי הפרמטר הראשון שהוא פונקציה. אם הפונקציה כאשר הארגומנט שמוצב בה הוא איבר מהאיטרטור (בכל פעם איבר אחד) אז אם כשהאיבר מוצב, והתוצאה היא בוליאינית נכון, אז האיבר הזה הולך להישאר וכל אלה שלא, אז לא ישארו. זה באמת קשב לתאר, אבל זה איך שזה פועל בערך.
עכשיו התנאי שבחרתי פה הוא שהאיבר יהיה מחרוזת ולכן השתמשתי בפונקצייה lambda b:type(b)==str כי יש כאן את הפרמטר b שאם הטיפוס נתונים שלו הוא מחרוזת כלומר str, אז יוחזר true, אחרת false, ובגלל שהאיברים היחידים שישארו הם רק אלה שנכונים בוליאינית אז רק אלה ששווים בוליאינית לtrue ישארו ואלה יהיו אך ורק כל האיברים שטיפוס הנתונים שלהם באיטרטור וספצפית ברשימה (במקרה שלך, לא שזה משנה באמת) יהיה מחרוזת.
אבל צריך להגדיר int לא string
היא רוצה מספר לא מחרוזת
היא רוצה מספר לא מחרוזת
print(yourlist[0])
yourlist.sort(key = len, reverse = true)
זה בסדר, לכולם יש טעויות
אני
for סתם מסובך, יש פונקציה לפייתון שממיינת רשימה ואפשר לתת לה איזה תבחין שרוצים ולהדפיס את האיבר הראשון בה
אבל היא אמרה: "אני צריכה לעשות רשימה ואז מהרשימה שזה ידפיס לי את המחרוזת הארוכה ביותר"
איך הסקת שזה מספר שלם, אין לי מושג
דרך אגב, באמת יש אפשרות להשוואת מחרוזות בפייתון, ואפילו להגיד אם הן גדולות או קטנות אחת מהשנייה, כך שפשוט נתתי לה בדיוק מה שהיא ביקשה להבין
איך הסקת שזה מספר שלם, אין לי מושג
דרך אגב, באמת יש אפשרות להשוואת מחרוזות בפייתון, ואפילו להגיד אם הן גדולות או קטנות אחת מהשנייה, כך שפשוט נתתי לה בדיוק מה שהיא ביקשה להבין
אה טעות שלי חשבתי שהיא מתכוונתלמספר הגדול ביותר
בגלל זה גם הצעתי לולאת for
בגלל זה גם הצעתי לולאת for
באותו הנושא: