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

遍历双列表补0生成等长值列表的代码问题排查

问题分析:分组收集值并补0的代码错误原因

输入数据

x = ['A', 'B', 'B', 'C', 'D', 'D', 'D']
y = [ 4 ,  3 ,  5 ,  9 ,  1 ,  6 ,  2 ]

期望输出

{'A': [4, 0, 0], 'B': [3, 5, 0], 'C': [9, 0, 0], 'D': [1, 6, 2]}

逻辑规则

  • 按x中的字母分组收集y的对应值
  • 补0至与出现次数最多的字母的长度一致(此处D出现3次,目标长度为3)

错误代码及结果

错误代码

from collections import Counter

c = Counter(x)
max_length = c.most_common()[0][-1]

my_dict = {}
for ix, iy in zip(x,y):
    my_dict[ix] = [iy] + [0 for _ in range(max_length-1)]

错误输出

{'A': [4, 0, 0], 'B': [5, 0, 0], 'C': [9, 0, 0], 'D': [2, 0, 0]}

代码问题分析

  • 覆盖已有分组值:循环中每次遇到相同的ix(如B、D),都会直接用当前的iy生成新列表覆盖之前的赋值。比如B第一次循环时被设为[3,0,0],第二次遇到B时直接替换成[5,0,0],导致第一个B对应的3丢失;D最终只保留了最后一个值2。
  • 未实现分组收集逻辑:代码没有先把同一分组的所有y值收集起来,而是每次都单独生成一个仅包含当前iy的补0列表,完全忽略了同组的其他值。

修正代码示例

先收集每个分组的所有对应值,再统一补0到最大长度:

from collections import Counter

x = ['A', 'B', 'B', 'C', 'D', 'D', 'D']
y = [4, 3, 5, 9, 1, 6, 2]

c = Counter(x)
max_length = c.most_common()[0][-1]

my_dict = {}
# 第一步:收集每个分组的所有y值
for ix, iy in zip(x, y):
    if ix not in my_dict:
        my_dict[ix] = []
    my_dict[ix].append(iy)
# 第二步:统一补0至最大长度
for key in my_dict:
    my_dict[key] += [0] * (max_length - len(my_dict[key]))

print(my_dict)
# 输出:{'A': [4, 0, 0], 'B': [3, 5, 0], 'C': [9, 0, 0], 'D': [1, 6, 2]}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:10:08