两段Pandas代码逻辑差异解析:LeetCode文章浏览问题排查
问题核心:两段代码的逻辑差异完全对应题目要求的不同条件
首先明确LeetCode《Article Views I》的核心要求:找出自己浏览过自己发布文章的作者ID,也就是必须满足「同一数据行中,author_id和viewer_id是同一个值」。
错误代码的逻辑问题
views.loc[views['author_id'].isin(views.viewer_id)]
这段代码做的是:检查每一行的author_id是否存在于整个viewer_id列的任意一行中,完全不考虑是否是同一行的匹配。
举个反例:
假设表格里有两行数据:
| author_id | viewer_id |
|---|---|
| 1 | 2 |
| 2 | 1 |
这里author_id=1存在于viewer_id列(第二行的viewer_id是1),author_id=2也存在于viewer_id列(第一行的viewer_id是2),所以错误代码会把这两行都选中,提取出author_id 1和2,但实际上这两个作者都没有浏览自己的文章,完全不符合题目要求,这就是测试用例失败的原因。
正确代码的逻辑
views[views['author_id'] == views['viewer_id']]
这段代码是逐行对比同一行的两个字段,只有当某一行的author_id和viewer_id完全相等时,才会选中该行,这正好匹配题目要求的「作者自己浏览自己文章」的条件。
修正后的完整代码参考
你原来的代码结构可以调整为:
# 筛选出自己看自己文章的行,提取author_id并重命名为id df = views[views['author_id'] == views['viewer_id']][['author_id']].rename(columns={'author_id': 'id'}) # 去重+排序 df = df.drop_duplicates().sort_values('id')
内容的提问来源于stack exchange,提问作者Osama Gaweesh
相关产品推荐
相关产品推荐

