Numpy Array Lists调用append方法未成功添加所有整数问题
问题原因
list.append()方法用法错误:Python原生列表的append是实例方法,仅接收1个参数(要添加的元素),不需要传入列表本身。你写的poslist.append(poslist, i)属于语法错误,完全达不到添加元素的效果,你混淆了原生列表方法和numpy.append()的写法,且就算是np.append也是返回新数组,不会修改原列表。append语句的位置错误:你仅在奇数处理的分支里写了添加逻辑,偶数计算、初始值、最终值1都没有触发添加操作,自然大部分数值都没被记录。
修正方案
修改列表添加逻辑,将添加语句移到每次数值更新之后,修正append用法即可,修正后代码如下:
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) print(num) while num != 1: i += 1 if num % 2 == 0: num = num // 2 else: num = num * 3 + 1 # 每次更新完数值统一添加,覆盖所有分支场景 print(num) poslist.append(i) numlist.append(num) print('Number Array:', numlist) print('Position Array', poslist) plt.plot(poslist, numlist) plt.show()
本次修改核心调整:
- 修正
append用法,直接传入要添加的元素即可 - 把添加逻辑统一放到每次数值更新后,不管奇偶都能被记录,最终的终止值1也会被正常加入列表
- 调整循环判断条件,逻辑更简洁,移除了无效的numpy导入(原生列表完全满足需求,若需要numpy格式可在绘图前统一转换)
内容的提问来源于stack exchange,提问作者Commodore 64
相关产品推荐
相关产品推荐

