@אליעזר
שלום!
האם מקובל להציג כאן קוד לדון עליו ולא רק שאלות בו?
אם לא, תקנו אותי בבקשה.
אם כן...
כאמור זה הקוד פייתון הראשון שלי, אשמח לכל הערה בונה, ולכן אני מצרף כאן את הקוד של הפונקציה שכתבתי היום...
יעודו:
מקבל שתי רשימות באורך זהה, הראשונה היא זו שאליה משווים, השניה זו שנבדקת בפועל. עובר לפי הסדר בלבד, ומשווה אברים, אברים לא זהים, מוחזרים ברשימה חדשה.
תודה לכולכם!
def filterNews(OldData, NewData):
"""filtr parms and return news date only (test if 1==1,2==2...)
:param oldData,newList: identical lists of dictionary [{title:link},{title:link}]
:return: Only data that is in the newData or null (if new[1]!=old[1],now[2]!=old[2]...)
"""
try:
if str(type(OldData)) and str(type(NewData)) !="<class 'list'>":
raise AttributeError("the def work on list only!")
if len(OldData) != len(NewData):
raise AttributeError("The lists are not identical in length!")
newList=[]
startIndex=0
endIndex=len(NewData)
while startIndex<endIndex:
if str(OldData[startIndex])!=str(NewData[startIndex]):
newList.append(NewData[startIndex])
startIndex+=1
except AttributeError as er:
print("Error:", er)
return False
else:
return newList
old=[1,2,3,4,5]
new=[4,5,3,45,5]
print(filterNews(old,new))
print(old,new)
הגרסה שלי לקוד
עם הזמן תראה שאתה יכול להשתמש בפייתון בלי לדחוף לכל דבר try except
try except אתה משתמש במקומות שאתה נזרק מהתוכנית כי אתה לא יודע מה אתה מקבל ואין לך אפשרות לבדוק / לא כדאי לך לבדוק את שלל האופציות האחרות
def filterNews(OldData, NewData):
"""filtr parms and return news date only (test if 1==1,2==2...)
:param oldData,newList: identical lists of dictionary [{title:link},{title:link}]
:return: Only data that is in the newData or null (if new[1]!=old[1],now[2]!=old[2]...)
"""
if not isinstance(OldData, list) and not isinstance(NewData, list):
print("the def work on list only!")
return None
elif len(OldData) != len(NewData):
print("The lists are not identical in length!")
return None
newList=[]
for New, Old in zip(NewData, OldData):
if NewData[New] != OldData[Old]:
newList.append(New)
return newList
old=[1,2,3,4,5]
new=[4,5,3,45,5]
print(filterNews(old,new))
print(old,new)
מה היה לנו פה
zip עובר על שתי מערכים בו זמנית אבר מפה ואבר משם
In [8]: a, b = range(1, 10), range(100, 1000, 100)
In [9]: for i, j in zip (a, b):
...: print("{0} -- {1}".format(i, j))
...:
1 -- 100
2 -- 200
3 -- 300
4 -- 400
5 -- 500
6 -- 600
7 -- 700
8 -- 800
9 -- 900
בפייתון מעבר על מילון בלולאה מוציא רק את המפתחות ולא את התוכן (אתה מקבל מערך של מפתחות)
In [13]: my_dict = {i:j for i, j in zip(range(1,10), "ABCDEFGIJ")}
In [14]: my_dict
Out[14]: {1: 'A', 2: 'B', 3: 'C', 4: 'D', 5: 'E', 6: 'F', 7: 'G', 8: 'I', 9: 'J'}
In [16]: for i in my_dict:
...: print (i)
...:
1
2
3
4
5
6
7
8
9
isinstance הצורה בפייתון שבודקים type של אובייקט
אחרי כל הברברת נראה שזה מה שאתה מחפש
https://github.com/GregUK/vb3_7_scraper
אגב זה לא רק לאתר אחד אלא למערכת פורומים אחת שנחשבת בין הפופולריות.
פורסם במקור בפורום CODE613 ב23/03/2017 19:39 (+02:00)