ווטסאפ - לינוקס, BSD, קוד פתוח ותוכנה חופשית בעברית. Whatsup - Linux, BSD, open source and free software in Hebrew

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
מתפתחאורח · ·
 

הודעה פורסם: 26/03/2015 - 19:56
נושא ההודעה: פייתון: מישהו יכול להסביר לי למה התנאי הבא מתקיים?

אני מנסה להריץ את התנאי הבא בקוד שלי, הבעיה היא שהתנאי מתקיים למרות שהערכים לא שווים, ההתנהגות הזאת מתרחשת רק מתי שאני משתמש עם or
איפה אני שוגה?
איזה מידע חסר לי?
קוד:

>>> str1 = 'yoyo'
>>> if str1 in 'aaaaa' or 'yopo':
...     print 'sdfsdfsfsdfsfsdf'
...     
...
sdfsdfsfsdfsfsdf
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
eאורח · ·
 

הודעה פורסם: 26/03/2015 - 20:11
נושא ההודעה:

קוד:
'yopo'

זה לא תנאי
נדמה לי שהתכוונת לכתוב:

קוד:

if str1 in 'aaaaa' or str1 in 'yopo':
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
eאורח · ·
 

הודעה פורסם: 26/03/2015 - 20:11
נושא ההודעה:

קוד:
'yopo'

זה לא תנאי

נדמה לי שהתכוונת לכתוב:
קוד:

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 ":)"

 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
mksoftלא בפורום כעתSite Admin ת.הצטרפות: 17/03/2002 · הודעות: 10514 · מיקום: כדור הארץ
 

הודעה פורסם: 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
>>>
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
queencyלא בפורום כעת ת.הצטרפות: 13/11/2008 · הודעות: 2139 ·
 

הודעה פורסם: 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).
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
הצגת הודעות מלפני:     
מעבר אל:  
כל הזמנים הם GMT + 2 שעות
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
PNphpBB2 © 2003-2004 

תוכן הדיון

  1. אורח [מתפתח]
  2. אורח [e]
  3. אורח [e]
  4. אורח [מתפתח]
  5. אורח [ברנש לא מקוון]
  6. אורח
  7. אורח
  8. אורח
  9. אורח
  10. אורח [מתפתח]
  11. אורח
  12. אורח
  13. mksoft
  14. אורח
  15. queency
  16. אורח
  17. אורח
  18. אורח
  19. אורח
  20. אורח