You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python编程求助:统计文件中粉丝数最多的用户名

看起来你在处理粉丝统计的问题时遇到了不少麻烦,我来一步步帮你解决这个问题,包括支持特殊字符的情况。


核心需求回顾

先明确我们要实现的目标:

  • 从follows.txt读取数据,每行格式为「用户名 + 其关注的用户列表」(允许单行只有用户名,代表该用户未关注任何人)
  • 统计每个用户的粉丝数(即有多少人关注了他)
  • 找出粉丝数最多的用户;若有并列,按字母数字顺序输出所有并列用户
  • 支持包含#、@等非字母数字字符的用户名

你之前代码的问题分析

你的尝试代码存在几个关键逻辑和语法错误:

  • 用元组count = ()作为计数容器:元组是不可变类型,根本无法用来累加计数,应该用字典存储每个用户的粉丝数
  • 遍历字符而非单词:for word in line:会逐字符遍历行内容,而非拆分出每个用户名,需要用line.split()拆分单词
  • 逻辑混淆:没有正确关联「关注者」和「被关注者」,应该给被关注的用户增加粉丝数,而非无差别计数
  • 赋值与比较混用:maxCount == count是比较操作,赋值应该用maxCount = count

完整解决方案代码

下面是可以直接运行的代码,我会逐行解释细节:

# 初始化字典,存储每个用户的粉丝数:键=用户名,值=粉丝数
follower_counts = {}

# 打开文件,指定utf-8编码兼容特殊字符
with open('follows.txt', 'r', encoding='utf-8') as f:
    for line in f:
        # 去除行首尾空白(如换行符),按空格拆分成单词列表
        parts = line.strip().split()
        if not parts:
            continue  # 跳过空行
        
        # 拆分当前用户(关注者)和他关注的用户列表
        current_user = parts[0]
        followed_users = parts[1:]
        
        # 给每个被关注的用户增加粉丝数
        for user in followed_users:
            if user in follower_counts:
                follower_counts[user] += 1
            else:
                follower_counts[user] = 1  # 首次出现的用户初始化为1

# 【可选】统计所有出现过的用户(包括无粉丝的用户)
all_users = set()
with open('follows.txt', 'r', encoding='utf-8') as f:
    for line in f:
        parts = line.strip().split()
        all_users.update(parts)

# 给无粉丝的用户设置粉丝数为0
for user in all_users:
    if user not in follower_counts:
        follower_counts[user] = 0

# 处理无数据的情况
if not follower_counts:
    print("未读取到任何用户数据")
else:
    # 找出最大粉丝数
    max_count = max(follower_counts.values())
    # 收集所有粉丝数等于最大值的用户
    top_users = [user for user, count in follower_counts.items() if count == max_count]
    # 按字母数字顺序排序
    top_users_sorted = sorted(top_users)
    
    # 输出结果
    print("粉丝数最多的用户:")
    for user in top_users_sorted:
        print(f"- {user} (粉丝数:{max_count})")

代码细节说明

  1. 粉丝数统计逻辑:

    • 用字典follower_counts精准记录每个用户的粉丝数,遍历每行时,给当前用户关注的所有人各加1粉丝
    • 加入空行处理,避免空行导致的索引错误
  2. 特殊字符支持:

    • 我们用split()按空格拆分内容,只要用户名是单个「无空格的字符串」,不管包含#、@还是其他特殊字符,都能被正确识别和统计,无需额外处理
  3. 并列用户排序:

    • 用sorted(top_users)对并列用户排序,Python默认的字符串排序遵循ASCII码顺序,完全符合字母数字排序要求(比如a在b前,1在a前)
  4. 文件读取问题解决:

    • 确保follows.txt和脚本在同一目录,或使用绝对路径(如C:/Users/xxx/follows.txt)
    • 加上encoding='utf-8'参数,避免特殊字符导致的编码错误

测试示例输入

针对你提供的示例follows.txt内容(假设每行结构为:

andrew fred
fred
judy andrew fred
george judy andrew
john george

),运行代码后会得到:

粉丝数最多的用户:
- andrew (粉丝数:2)
- fred (粉丝数:2)

内容的提问来源于stack exchange,提问作者Benjamin Hambly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:38:10