355 設計推特

2021-10-03 04:49:34 字數 3188 閱讀 9648

思路見**,注釋很詳細

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亡 受到嚴重身體傷害或不治之症的推文是不被允許的,所以...