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

Python列表转指定格式NumPy数组 修复Collatz猜想Matplotlib绘图错误

异常原因
  • 第一个问题是迭代过程中向列表追加值的逻辑错误:只有计算奇数步的考拉兹值时才会把数据追加到poslist和numlist,偶数步计算出的新值、以及最终终止值1都没有被追加到列表,导致两个列表缺失大量有效数据,长度远小于实际迭代步数。
  • 第二个问题是绘图传参逻辑错误:你构造的axislist是形状为(2, N)的二维NumPy数组,matplotlib.pyplot.plot()传入二维数组时会默认将数组的每一列作为单独的折线绘制,才会出现大量无意义的彩色线条。同时你没有明确指定x轴和y轴的对应关系,自然无法得到预期的步长-数值折线。
修复代码
import matplotlib.pyplot as plt

poslist = []
numlist = []
i = 1

num = int(input('Number to check?'))
plt.title(f'{num}: Collatz Graph')
plt.xlabel('Step')
plt.ylabel('Value')

# 初始值加入列表
poslist.append(i)
numlist.append(num)

while num != 1:
    i += 1
    if num % 2 == 0:
        num = num // 2
    else:
        num = num * 3 + 1
    # 每步计算完成后统一追加数据,避免分支遗漏
    poslist.append(i)
    numlist.append(num)

# 直接传入x、y轴列表即可,不需要额外转换为NumPy数组
plt.plot(poslist, numlist)
plt.show()
关键修改说明
  • 调整了循环判断逻辑,将列表追加操作放到循环公共分支,每步迭代的数值都会被记录,不会遗漏偶数步和最终终止值1
  • 绘图时直接传入poslist作为x轴参数、numlist作为y轴参数,符合plt.plot()的常规传参规则,不需要额外构造二维数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:15:02