טכניקות פייתון יעילות לספירת אלמנטים לפני טופלה ברשימה – היו בצד הנכון של השינוי

פרסומת
תכנון תשתיות רפואיות


💡 ניסוח בעיה: אנחנו צריכים ליישם תוכנית Python שחוצה רשימה וסופרת את מספר האלמנטים שמגיעים לפני רכיב ה-tuple הראשון שנמצא ברשימה. לדוגמה, נתונה רשימה [1, 3, 'a', (4, 5), 7,'b']התוכנית שלנו צריכה להחזיר את הספירה של 3 מכיוון שהיא מפסיקה לספור ברגע שהיא נתקלת ב-tuple (4, 5).

פרסומת

שיטה 1: שימוש בלולאה עם תנאי הפסקה

גישה קלה להבנה כוללת איטרציה על הרשימה באמצעות for-loop ושבירת הלולאה כאשר נתקלים ב-tuple. שיטה זו מפורשת ומצוינת למתחילים לתפיסה.

הנה דוגמה:

my_list = [1, 3, 'a', (4, 5), 7, 'b']
count = 0
for element in my_list:
    if isinstance(element, tuple):
        break
    count += 1
print(count)

תְפוּקָה: 3

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

שיטה 2: שימוש ב- next() פונקציה ו enumerate()

ה next() לתפקד עם enumerate() יכול לשמש לפתרון תמציתי יותר. זה מנצל את הפונקציות המובנות של Python כדי למצוא את האינדקס של ה-tuple, שמשתווה לספירה.

הנה דוגמה:

my_list = [1, 3, 'a', (4, 5), 7, 'b']
tuple_index = next((i for i, x in enumerate(my_list) if isinstance(x, tuple)), len(my_list))
print(tuple_index)

תְפוּקָה: 3

קטע זה משתמש בביטוי מחולל כדי ליצור איטרציה של מדדים שבהם האלמנטים הם tuples. ה next() הפונקציה מביאה את האלמנט הראשון (אינדקס) מהמחולל הזה, כשהיא כברירת מחדל לאורך הרשימה אם לא נמצא tuple. אינדקס זה מייצג את מספר האלמנטים לפני הטפול הראשון.

שיטה 3: שימוש בחיתוך רשימה וב- index שיטה

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

הנה דוגמה:

my_list = [1, 3, 'a', (4, 5), 7, 'b']
try:
    count = my_list.index(next(filter(lambda x: isinstance(x, tuple), my_list)))
except StopIteration:
    count = len(my_list)
print(count)

תְפוּקָה: 3

קוד זה משתמש במסנן כדי להעביר דרך כל פריט עד שהוא מוצא tuple. ה next() לאחר מכן הפונקציה מקבלת את האלמנט הראשון שתואם, אשר קלט לתוך index פונקציה כדי למצוא את המיקום ברשימה. במקרה שאין טופל נוכח, אנו מטפלים בא StopIteration כדי להחזיר את אורך הרשימה המלאה.

שילוב של הבנת רשימה ו index() יוצר One-Liner אלגנטי שיכול להשיג את המטרה שלנו. זה אידיאלי כאשר מעדיפים קוד תמציתי.

הנה דוגמה:

my_list = [1, 3, 'a', (4, 5), 7, 'b']
count = [i for i, x in enumerate(my_list) if isinstance(x, tuple)][0] if any(isinstance(x, tuple) for x in my_list) else len(my_list)
print(count)

תְפוּקָה: 3

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

שיטת בונוס One-Liner 5: שימוש ב-one-liner יותר פייתוני

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

הנה דוגמה:

my_list = [1, 3, 'a', (4, 5), 7, 'b']
count = len(my_list) - sum(1 for _ in my_list[::-1] if not isinstance(_, tuple))
print(count)

תְפוּקָה: 3

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

סיכום/דיון

  • שיטה 1: שימוש בלולאה עם תנאי הפסקה. פשוט וידידותי למתחילים. לא הפתרון הכי אלגנטי או פיתוני.
  • שיטה 2: משתמש ב next() פונקציה ו enumerate(). קומפקטי ומשתמש בפונקציות מובנות. עשוי להיות פחות קריא למתחילים.
  • שיטה 3: באמצעות חיתוך רשימה ו- index שיטה. תופס חריגים, מה שהופך אותו לבטוח עבור רשימות ללא tuples. מורכב יותר עקב טיפול חריג.
  • שיטה 4: שימוש בהבנת רשימה ו index(). תמציתי ומשתמש בתכונות המתקדמות של Python. עשוי להיות פחות ביצועי עקב יצירת רשימת ביניים.
  • שיטת בונוס 5: One-Liner פיתוני עם סיכום הפוך. מאוד תמציתי אבל פחות אינטואיטיבי במבט ראשון. מצוין עבור סקריפטים מהירים או חישובים נקודתיים.



קישור לכתבת המקור – 2024-02-29 18:58:40

Facebook
Twitter
LinkedIn
Telegram
WhatsApp
Email
פרסומת
X-ray_Promo1

עוד מתחומי האתר