Python统计电影演员数量:解决max函数返回值不符预期问题
解决方法:正确统计电影对应的演员数量
你的统计代码逻辑完全错误——当前代码是在统计电影标题的出现次数,而非对应演员的数量,这就是max()返回97而非实际207的原因。
问题根源
你写的统计代码里,is_Title每次循环切换状态,每碰到标题行就给该标题的计数+1。但根据你的需求,文件格式应该是一个电影标题后跟着多行演员信息(而非标题、演员交替出现),你的遍历逻辑完全误解了文件结构。
正确实现思路
假设文件结构为:
电影标题1
演员A
演员B
...
电影标题2
演员X
演员Y
...
我们需要:
- 遍历文件时,记录当前统计的目标电影
- 遇到新标题时,切换当前统计对象
- 遇到演员行时,给当前电影的演员计数+1
修正后的代码
# 初始化字典:键为电影标题,值为对应演员数量 movie_actor_counts = {} current_movie = None # 用with语句自动管理文件,无需手动close with open("你的文件路径", "r") as fhand: for line in fhand: line = line.strip() if not line: # 跳过空行,避免干扰统计 continue # 判断当前行是标题还是演员:这里假设标题行不含逗号(演员行是"演员名, 角色名"格式) # 你可以根据文件实际格式调整判断条件,比如标题行全大写/长度更短等 if current_movie is None: # 初始状态,当前行是第一个电影的标题 current_movie = line movie_actor_counts[current_movie] = 0 else: if "," not in line: # 新的电影标题,切换统计目标 current_movie = line movie_actor_counts[current_movie] = 0 else: # 演员行,计数+1 movie_actor_counts[current_movie] += 1 # 找出演员数量最多的电影 top_movie = max(movie_actor_counts.items(), key=lambda item: item[1]) print(f"演员最多的电影:《{top_movie[0]}》,共{top_movie[1]}位演员")
为什么原代码无效?
你的统计代码片段:
if (is_Title): if line not in actors: actors[line] = 1 else: actors[line] = actors[line] + 1 is_Title = not is_Title
这段代码的逻辑是每遇到一次标题行,就给该标题的计数+1,本质是统计标题重复出现的次数,而非对应演员的数量。比如一个有207位演员的电影,标题只会出现1次,所以计数是1;你得到的97是某个标题重复出现了97次,完全不是你想要的结果。
额外提示
- 始终用
with语句操作文件,避免因忘记close()导致资源泄漏 - 处理文件时务必跳过空行,否则会出现无效计数
- 如果文件的标题和演员行有明确区分规则(比如标题有特定前缀),一定要在代码里明确判断,避免统计偏差
内容的提问来源于stack exchange,提问作者Justin Watts
相关产品推荐
相关产品推荐

