思路見**,注釋很詳細
from typing import list
import heapq # 使用堆來篩選最近發表的保溫
class
tweet
:"""推文類"""
def__init__
(self, tweet_id, cur_time)
: self.
next
=none
# 連線下一條推特
self.
id= tweet_id
self.time = cur_time # 發表時間,越大發表越近
class
user
:"""使用者類"""
def__init__
(self, user_id)
: self.follows =
set(
)# 關注的使用者
self.tweet_head =
none
# 維護當前使用者的推文鍊錶
self.
id= user_id
self.follows.add(user_id)
# 關注自己,便於查詢自己和關注的推文資訊
defpost
(self, tweet_id, cur_time)
:"""新建推文,頭插到推文鍊錶"""
new_tweet = tweet(tweet_id, cur_time)
new_tweet.
next
= self.tweet_head
self.tweet_head = new_tweet
deffollow
(self, followee_id)
:"""把某使用者新增到關注集合"""
self.follows.add(followee_id)
defunfollow
(self, followee_id)
:"""從關注集合移除某使用者"""
if followee_id != self.
idand followee_id in self.follows:
self.follows.remove(followee_id)
class
twitter
:"""推特類"""
def__init__
(self)
: self.time_stamp =
0# 時間,這裡類似部落格編號
self.all_users =
# 使用者id和使用者物件的對應字典
defposttweet
(self, userid:
int, tweetid:
int)
->
none
:"""根據id獲取user物件,並建立推文,推文編號+1"""
if userid not
in self.all_users:
self.all_users[userid]
= user(userid)
user = self.all_users[userid]
user.post(tweetid, self.time_stamp)
self.time_stamp +=
1def
getnewsfeed
(self, userid:
int)
-> list[
int]
:"""
1.若使用者不存在,返回
2.若使用者存在,找到關注集合的所有使用者的第乙個推文,放入最小堆中,依次取出最小的節點並把後續節點放入堆中
"""if userid not
in self.all_users:
self.all_users[userid]
= user(userid)
return
else
: user = self.all_users[userid]
heap =
for followee in user.follows:
cur_tweet_head = self.all_users[followee]
.tweet_head # 當前使用者的推文煉表頭節點
if cur_tweet_head:
[-cur_tweet_head.time, cur_tweet_head]
)# 發表時間的負值作為排序關鍵字
ans =
while
len(heap)
>0:
id)if tweet.
next:[
-tweet.
next
.time, tweet.
next])
iflen
(ans)
>=10:
return ans
return ans
deffollow
(self, followerid:
int, followeeid:
int)
->
none
:"""關注使用者"""
if followerid not
in self.all_users:
self.all_users[followerid]
= user(followerid)
follower = self.all_users[followerid]
if followeeid not
in self.all_users:
self.all_users[followeeid]
= user(followeeid)
follower.follow(followeeid)
defunfollow
(self, followerid:
int, followeeid:
int)
->
none
:"""取消關注"""
if followerid in self.all_users and followeeid in self.all_users:
follower = self.all_users[followerid]
follower.unfollow(followeeid)
355 設計推特
設計乙個簡化版的推特 twitter 可以讓使用者實現傳送推文,關注 取消關注其他使用者,能夠看見關注人 包括自己 的最近十條推文。你的設計需要支援以下的幾個功能 posttweet userid,tweetid 建立一條新的推文 getnewsfeed userid 檢索最近的十條推文。每個推文都...
如何爬蟲推特資料
1 首先你要有翻牆軟體 3 然後你將會得到 consumer key consumer secret access token access token secret 這4個資訊非常重要 4 然後在github上搜尋 twitteroauth download 下來 5 接下來你只要寫乙個index...
推特公司刪除希望川普去世推文,減少仇恨言論
美國當地時間9月1日,美國 川普在推特上宣布自己確診了新冠病毒,隨後將開始進行隔離和 在9月2日,社交 平台推特公司警告稱,將刪除平台上 希望特朗程式設計客棧普去世 的帖文。推特公司官方發文表示 那些針對 任何人 的祝願或者希望其死gukpyjv亡 受到嚴重身體傷害或不治之症的推文是不被允許的,所以...