פורסם: 26/03/2015 - 19:56
נושא ההודעה: פייתון: מישהו יכול להסביר לי למה התנאי הבא מתקיים?
|
אני מנסה להריץ את התנאי הבא בקוד שלי, הבעיה היא שהתנאי מתקיים למרות שהערכים לא שווים, ההתנהגות הזאת מתרחשת רק מתי שאני משתמש עם or
איפה אני שוגה?
איזה מידע חסר לי?
קוד: |
>>> str1 = 'yoyo'
>>> if str1 in 'aaaaa' or 'yopo':
... print 'sdfsdfsfsdfsfsdf'
...
...
sdfsdfsfsdfsfsdf
|
|
|
חזרה לתוכן הדיון |
פורסם: 26/03/2015 - 20:11
נושא ההודעה:
|
זה לא תנאי
נדמה לי שהתכוונת לכתוב:
קוד: |
if str1 in 'aaaaa' or str1 in 'yopo':
|
|
|
חזרה לתוכן הדיון |
פורסם: 26/03/2015 - 20:11
נושא ההודעה:
|
זה לא תנאי
נדמה לי שהתכוונת לכתוב:
קוד: |
if str1 in 'aaaaa' or str1 in 'yopo':
|
|
|
חזרה לתוכן הדיון |
פורסם: 26/03/2015 - 20:17
נושא ההודעה:
|
אהה
תודה רבה רבה בדקתי וזה עובד
ומסתבר גם שאפשר לקצר וכן לכתוב כמו שכתבתי רק בצורה הבאה.
קוד: |
if str1 in ('aaaaa' or 'yopo'):
... print 'sdfsdfsfsdfsfsdf'
|
|
|
חזרה לתוכן הדיון |
פורסם: 26/03/2015 - 20:50
נושא ההודעה:
|
או הרבה יותר "פיתוני":
קוד: | if a in ["aaa","bbb"]: |
|
|
חזרה לתוכן הדיון |
פורסם: 26/03/2015 - 22:16
נושא ההודעה:
|
מתפתח : | אהה
תודה רבה רבה בדקתי וזה עובד
ומסתבר גם שאפשר לקצר וכן לכתוב כמו שכתבתי רק בצורה הבאה.
קוד: |
if str1 in ('aaaaa' or 'yopo'):
... print 'sdfsdfsfsdfsfsdf'
|
|
לא אי אפשר.
קוד: |
>>> ('a' or 'b')
'a'
>>> 'a' in ('a' or 'b')
True
>>> 'b' in ('a' or 'b')
False
|
או בקיצור זה במקרה עובד ולא נכון.
קוד: |
>>> 'a' in ['a','b']
True
>>> 'b' in ['a','b']
True
|
או בקיצור נכון.
|
|
חזרה לתוכן הדיון |
פורסם: 27/03/2015 - 17:44
נושא ההודעה:
|
אבל גם
קוד: | >>> 'a' in 'ab'
True
>>> 'a' in ['ab','ac']
False |
אני חושב שהמטרה היא לבדוק אם strl היא תת מחרוזת של אחת המחרוזות, לא אם היא שווה לאחת המחרוזות, לכן גם אלטרנטיבה זו לא נכונה.
|
|
חזרה לתוכן הדיון |
פורסם: 27/03/2015 - 19:51
נושא ההודעה: שאלה לשואל המקורי - למה כוונת?
|
שאלה לשואל המקורי - למה כוונת?
Anonymous : | אבל גם
קוד: | >>> 'a' in 'ab'
True
>>> 'a' in ['ab','ac']
False |
אני חושב שהמטרה היא לבדוק אם strl היא תת מחרוזת של אחת המחרוזות, לא אם היא שווה לאחת המחרוזות, לכן גם אלטרנטיבה זו לא נכונה. |
|
|
חזרה לתוכן הדיון |
פורסם: 28/03/2015 - 10:09
נושא ההודעה: Re: שאלה לשואל המקורי - למה כוונת?
|
Anonymous : | שאלה לשואל המקורי - למה כוונת?
Anonymous : | אבל גם
קוד: | >>> 'a' in 'ab'
True
>>> 'a' in ['ab','ac']
False |
אני חושב שהמטרה היא לבדוק אם strl היא תת מחרוזת של אחת המחרוזות, לא אם היא שווה לאחת המחרוזות, לכן גם אלטרנטיבה זו לא נכונה. |
|
ייתכן שמדובר על מציאת תת מחרוזת אבל גם אז זה לא נכון.
כדי לחפש תת מחרוזת צריך לעבור על כל האיברים ברשימה.
|
|
חזרה לתוכן הדיון |
פורסם: 28/03/2015 - 20:49
נושא ההודעה:
|
זה בשביל למצוא תת מחרוזת, ותודה על התיקון
יש צורה שכן אפשר לעשות תנאי מקוצר?
|
|
חזרה לתוכן הדיון |
פורסם: 28/03/2015 - 22:26
נושא ההודעה: הנה פתרון באמצעות any ו-list comprhension
|
מתפתח : | זה בשביל למצוא תת מחרוזת, ותודה על התיקון
יש צורה שכן אפשר לעשות תנאי מקוצר? |
קוד: |
wanted_string = 'aafdf'
strings = ['aaa', 'aafdfaa']
if any([True for string_ in strings if wanted_string in string_]):
print ":)"
|
|
|
חזרה לתוכן הדיון |
פורסם: 28/03/2015 - 23:44
נושא ההודעה:
|
לא יותר פשוט/ברור לכתוב:
קוד: |
wanted_string = 'aafdf'
strings = ['aaa', 'aafdfaa']
if any([wanted_string in string_ for string_ in strings ]):
print ":)"
|
|
|
חזרה לתוכן הדיון |
פורסם: 29/03/2015 - 00:45
נושא ההודעה:
|
עקב השימוש ב-any, מסיבות ביצועים וצריכת זכרון (במיוחד אם יש הרבה מחרוזות) עדיף להשתמש ב-generator expression במקום ב־list comprehension.
לדוגמא: אם המחרוזת הראשונה מתאימה, עם הדוגמא הנ"ל, עדיין צריך להרכיב את הרשימה מראש ולרוץ על כל המחרוזות לפני ש-any יבדוק אותה. עם generator expression זה לא המצב, ברגע ש־any ימצא True לא יהיה צורך לרוץ על כל השאר.
|
|
חזרה לתוכן הדיון |
פורסם: 29/03/2015 - 01:14
נושא ההודעה:
|
כן יש דרך:
קוד: |
>>> def is_str_in_list(exp, str_list):
... for x in str_list:
... if exp in x:
... return True
... return False
...
>>> is_str_in_list('aa', ['ab', 'xaa'])
True
>>> is_str_in_list('aa', ['ab', 'xa'])
False
>>>
|
|
|
חזרה לתוכן הדיון |
פורסם: 29/03/2015 - 11:15
נושא ההודעה:
|
mksoft : | עקב השימוש ב-any, מסיבות ביצועים וצריכת זכרון (במיוחד אם יש הרבה מחרוזות) עדיף להשתמש ב-generator expression במקום ב־list comprehension.
לדוגמא: אם המחרוזת הראשונה מתאימה, עם הדוגמא הנ"ל, עדיין צריך להרכיב את הרשימה מראש ולרוץ על כל המחרוזות לפני ש-any יבדוק אותה. עם generator expression זה לא המצב, ברגע ש־any ימצא True לא יהיה צורך לרוץ על כל השאר. |
הכוונה בשימוש ב generator expression זה השימוש עם yield ?
ותנאי יציאה כאשר הוא מאומות ?
_________________ מערכת: GNU/Linux debian
|
|
חזרה לתוכן הדיון |
פורסם: 29/03/2015 - 11:19
נושא ההודעה:
|
queency : | mksoft : | עקב השימוש ב-any, מסיבות ביצועים וצריכת זכרון (במיוחד אם יש הרבה מחרוזות) עדיף להשתמש ב-generator expression במקום ב־list comprehension.
לדוגמא: אם המחרוזת הראשונה מתאימה, עם הדוגמא הנ"ל, עדיין צריך להרכיב את הרשימה מראש ולרוץ על כל המחרוזות לפני ש-any יבדוק אותה. עם generator expression זה לא המצב, ברגע ש־any ימצא True לא יהיה צורך לרוץ על כל השאר. |
הכוונה בשימוש ב generator expression זה השימוש עם yield ?
ותנאי יציאה כאשר הוא מאומות ? |
בגדול כן, אבל בכתיב מקוצר זה נראה די דומה ל-list comprehension:
קוד: |
wanted_string = 'aafdf'
strings = ['aaa', 'aafdfaa']
if any((wanted_string in string_ for string_ in strings )):
print ":)"
|
שים לב לסוגריים...
|
|
חזרה לתוכן הדיון |
פורסם: 29/03/2015 - 15:33
נושא ההודעה:
|
לא צריך generator אפשר גם ככה:
קוד: |
>>> any('aa' in s for s in ['aa','bb'])
True
>>> any('aab' in s for s in ['aa','bb'])
False
>>>
|
זה יעצור ברגע שהוא ימצא את הערך המתאים לתנאי ברשימה.
|
|
חזרה לתוכן הדיון |
פורסם: 29/03/2015 - 16:18
נושא ההודעה:
|
Anonymous : | לא צריך generator אפשר גם ככה:
קוד: |
>>> any('aa' in s for s in ['aa','bb'])
True
>>> any('aab' in s for s in ['aa','bb'])
False
>>>
|
זה יעצור ברגע שהוא ימצא את הערך המתאים לתנאי ברשימה. |
זה נראה כמו generator expression
|
|
חזרה לתוכן הדיון |
פורסם: 29/03/2015 - 17:13
נושא ההודעה:
|
זה אכן כך אבל לא צריך ליצור פונקציה נפרדת עם yield כמו שנאמר כאן.
|
|
חזרה לתוכן הדיון |
פורסם: 10/04/2015 - 11:07
נושא ההודעה:
|
Anonymous : | Anonymous : | לא צריך generator אפשר גם ככה:
קוד: |
>>> any('aa' in s for s in ['aa','bb'])
True
>>> any('aab' in s for s in ['aa','bb'])
False
>>>
|
זה יעצור ברגע שהוא ימצא את הערך המתאים לתנאי ברשימה. |
זה נראה כמו generator expression |
בגלל שזה generator expression. הכניסו בשפה קיצור מיוחד שמאפשר להסתפק בזוג סוגריים אחד בלבד במצב הזה (קריאה לפונקציה עם ארגומנט יחיד שהוא generator expression).
|
|
חזרה לתוכן הדיון |
|