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

如何用for/while循环处理Python二维数组统计候选人偏好票数?

用循环统计偏好选票的实现方案

没问题,我来帮你搞定这个用循环统计候选人偏好票的需求。我们可以先初始化统计变量,再通过嵌套循环遍历选票数组,下面分for循环和while循环两种方式实现,还会给你一个优化方案:

一、使用嵌套For循环(最常用的方式)

这种方式逻辑直观,是Python处理二维列表的常规操作:

# 初始化所有统计变量:candidateNvoteM 代表候选人N的第M偏好票数
candidate1vote1 = 0
candidate1vote2 = 0
candidate1vote3 = 0
candidate2vote1 = 0
candidate2vote2 = 0
candidate2vote3 = 0
candidate3vote1 = 0
candidate3vote2 = 0
candidate3vote3 = 0
candidate4vote1 = 0
candidate4vote2 = 0
candidate4vote3 = 0
candidate5vote1 = 0
candidate5vote2 = 0
candidate5vote3 = 0

# 示例 ballots 数组(你可以替换成自己的实际数据)
ballots = [
    [1, 2, 3, 0, 0],
    [1, 3, 2, 0, 0],
    [2, 1, 3, 0, 0]
]

# 遍历每一张选票
for ballot in ballots:
    # 遍历当前选票的每个位置,用enumerate同时获取索引(对应候选人)和偏好值
    for candidate_index, preference in enumerate(ballot):
        # 忽略0值
        if preference == 0:
            continue
        # 把索引转成候选人编号(索引0对应候选人1,以此类推)
        candidate_num = candidate_index + 1
        # 偏好值1/2/3就是第1/2/3偏好票
        vote_rank = preference
        
        # 根据候选人编号和偏好等级累加对应变量
        if candidate_num == 1:
            if vote_rank == 1:
                candidate1vote1 += 1
            elif vote_rank == 2:
                candidate1vote2 += 1
            else:
                candidate1vote3 += 1
        elif candidate_num == 2:
            if vote_rank == 1:
                candidate2vote1 += 1
            elif vote_rank == 2:
                candidate2vote2 += 1
            else:
                candidate2vote3 += 1
        elif candidate_num == 3:
            if vote_rank == 1:
                candidate3vote1 += 1
            elif vote_rank == 2:
                candidate3vote2 += 1
            else:
                candidate3vote3 += 1
        elif candidate_num == 4:
            if vote_rank == 1:
                candidate4vote1 += 1
            elif vote_rank == 2:
                candidate4vote2 += 1
            else:
                candidate4vote3 += 1
        elif candidate_num == 5:
            if vote_rank == 1:
                candidate5vote1 += 1
            elif vote_rank == 2:
                candidate5vote2 += 1
            else:
                candidate5vote3 += 1

# 打印结果验证
print(f"候选人1的第1偏好票:{candidate1vote1}")
print(f"候选人2的第2偏好票:{candidate2vote2}")
print(f"候选人3的第2偏好票:{candidate3vote2}")

代码说明:

  • 先初始化所有15个统计变量(5个候选人×3种偏好)。
  • 外层for循环遍历每一张选票(每个子列表)。
  • 内层用enumerate遍历选票元素,同时拿到位置索引(对应候选人1-5)和偏好值。
  • 跳过0值后,根据候选人编号和偏好等级,找到对应的变量累加计数。

二、使用While循环实现

如果必须用while循环,逻辑和for循环一致,只是用索引来控制遍历流程:

# 同样初始化统计变量
candidate1vote1 = 0
candidate1vote2 = 0
candidate1vote3 = 0
candidate2vote1 = 0
candidate2vote2 = 0
candidate2vote3 = 0
candidate3vote1 = 0
candidate3vote2 = 0
candidate3vote3 = 0
candidate4vote1 = 0
candidate4vote2 = 0
candidate4vote3 = 0
candidate5vote1 = 0
candidate5vote2 = 0
candidate5vote3 = 0

ballots = [
    [1, 2, 3, 0, 0],
    [1, 3, 2, 0, 0],
    [2, 1, 3, 0, 0]
]

# 外层while循环:遍历所有选票
ballot_index = 0
while ballot_index < len(ballots):
    current_ballot = ballots[ballot_index]
    # 内层while循环:遍历当前选票的每个元素
    pref_index = 0
    while pref_index < len(current_ballot):
        preference = current_ballot[pref_index]
        if preference == 0:
            pref_index += 1
            continue
        candidate_num = pref_index + 1
        vote_rank = preference
        
        # 同样的条件判断累加计数
        if candidate_num == 1:
            if vote_rank == 1:
                candidate1vote1 +=1
            elif vote_rank ==2:
                candidate1vote2 +=1
            else:
                candidate1vote3 +=1
        elif candidate_num == 2:
            if vote_rank ==1:
                candidate2vote1 +=1
            elif vote_rank ==2:
                candidate2vote2 +=1
            else:
                candidate2vote3 +=1
        elif candidate_num ==3:
            if vote_rank ==1:
                candidate3vote1 +=1
            elif vote_rank ==2:
                candidate3vote2 +=1
            else:
                candidate3vote3 +=1
        elif candidate_num ==4:
            if vote_rank ==1:
                candidate4vote1 +=1
            elif vote_rank ==2:
                candidate4vote2 +=1
            else:
                candidate4vote3 +=1
        elif candidate_num ==5:
            if vote_rank ==1:
                candidate5vote1 +=1
            elif vote_rank ==2:
                candidate5vote2 +=1
            else:
                candidate5vote3 +=1
        pref_index += 1
    ballot_index += 1

# 验证结果
print(f"候选人1的第1偏好票:{candidate1vote1}")
print(f"候选人3的第2偏好票:{candidate3vote2}")

三、优化方案:用二维列表简化统计

用单独变量统计会显得繁琐,推荐用二维列表来存储统计结果,代码更简洁易维护:

# 二维列表:stats[候选人编号-1][偏好等级-1] 对应票数
# 比如 stats[0][0] 是候选人1的第1偏好票,stats[1][1]是候选人2的第2偏好票
stats = [[0]*3 for _ in range(5)]

ballots = [
    [1, 2, 3, 0, 0],
    [1, 3, 2, 0, 0],
    [2, 1, 3, 0, 0]
]

for ballot in ballots:
    for idx, pref in enumerate(ballot):
        if pref == 0:
            continue
        # 直接定位到对应位置累加
        stats[idx][pref-1] += 1

# 打印结果
print(f"候选人1的第1偏好票:{stats[0][0]}")
print(f"候选人2的第2偏好票:{stats[1][1]}")
print(f"候选人3的第2偏好票:{stats[2][1]}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:50:55