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

如何遍历嵌套布尔列表并聚合得分,遵循DRY原则实现?

实现方案

核心思路:复用计数逻辑,避免重复代码

要遵循DRY原则,关键是不要为用户和电脑分别编写重复的统计逻辑。下面提供两种简洁的实现方式:


方式1:单次遍历同时统计双方胜场

这种方法只遍历一次结果列表,同时累加用户和电脑的胜场数,完全避免重复代码:

game_outcome = [['wins', 'loses'], ['loses', 'wins'], ['loses', 'wins']]

user_wins = 0
computer_wins = 0

# 一次遍历处理双方结果
for user_result, computer_result in game_outcome:
    user_wins += 1 if user_result == 'wins' else 0
    computer_wins += 1 if computer_result == 'wins' else 0

# 判断最终胜负
if computer_wins > user_wins:
    print("computer wins")
else:
    print("user wins")

方式2:拆分结果后复用内置计数方法

通过zip(*game_outcome)将嵌套列表转置,拆分出用户和电脑的所有结果,再复用Python内置的count方法统计胜场,代码更简洁:

game_outcome = [['wins', 'loses'], ['loses', 'wins'], ['loses', 'wins']]

# 拆分用户和电脑的所有结果
user_results, computer_results = zip(*game_outcome)

# 复用count方法统计胜场,无需重复编写判断逻辑
user_wins = user_results.count('wins')
computer_wins = computer_results.count('wins')

# 判断最终胜负
if computer_wins > user_wins:
    print("computer wins")
else:
    print("user wins")

为什么符合DRY原则?

  • 两种方式都没有重复编写"判断是否为胜场并计数"的逻辑:方式1在一次循环内同时处理双方,方式2复用了内置的count方法,仅需调用两次而非重复实现计数逻辑。
  • 如果后续胜场的标识(比如从'wins'改成'win'),只需要修改一处代码即可,无需在多个地方同步修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:40:32